标签的认识

第一个:

open-data:是一个能自动获取微信开发数据的标签(微信号 微信头像都是开放数据)

官方解析

小程序代码 desc是什么意思 小程序代码讲解_xml


小程序代码 desc是什么意思 小程序代码讲解_xml_02

如下

<open-data type="userAvatarUrl"></open-data>

上面代码相当于 可以直接显示 用户的头像

小程序代码 desc是什么意思 小程序代码讲解_获取用户信息_03


第二个:

block:相当于view或者HTML里面的div 主要作用是为了在wxml中写 if… else if… else… 语句(当然其他标签也可以写if语句只不过常用block) 如下图

小程序代码 desc是什么意思 小程序代码讲解_获取用户信息_04


上图中页面

当index1,index2,index3哪一个为true就执行其里面的wxml代码 所以只会显示其中的一个block

因为三个标签用if… else if… else… 语句连接在一起同样下面的两个button一样道理

小程序代码 desc是什么意思 小程序代码讲解_xml_05


当canIUseGetUserProfile为true的时候只显示第一个button

接口的认识

第一个:

wx.canIUse:返回该属性等 在目前的开发工具版本中 是否支持

官方解析

小程序代码 desc是什么意思 小程序代码讲解_javascript_06


如下图

小程序代码 desc是什么意思 小程序代码讲解_小程序代码 desc是什么意思_07


第一行就是如果 本版本支持button标签里面的open-type属性中的getUserInfo值 那么canIUse就是true 否则就是false

下面也是这样的道理第二个:

wx.getUserProfile:旧版本用于获取用户数据(微信名字性别头像)的接口函数

小程序代码 desc是什么意思 小程序代码讲解_小程序_08


上图是判断是否支持该接口

第三个:
wx.getUserProfile:新版本用于获取用户数据的接口函数

代码讲解

了解了上面的基础以后 就可以分析新建的项目的初始代码的意思了
js

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    //支持button.open-type.getUserInfo为true 也就是支持旧版获取用户信息的接口wx.getUserInfo()
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    canIUseGetUserProfile: false,
    //同时支持open-data.type.userAvatarUrl和open-data.type.userNickName时候为true 也就是支持用open-data标签直接获取用户信息
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false
  },
  // 事件处理函数
  bindViewTap() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },

  onLoad() {
    
    if (wx.getUserProfile) {
      console.log("本版本支持使用wx.getUserProfile接口函数")
      this.setData({
        canIUseGetUserProfile: true
      })
    }

  },
  //新版获取用户信息
  getUserProfile(e) {
    console.log("getUserProfile")
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  //旧版获取用户信息
  getUserInfo(e) {
    console.log("getUserInfo")
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    console.log(e)
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

wxml

<!--index.wxml-->
<view class="container">

  <view class="userinfo">

<!-- 如果canIUseOpenData为true 那么显示第一个block -->
    <block wx:if="{{canIUseOpenData}}" calss="userinfo-opendata">
      <view class="userinfo-avatar" bindtap="bindViewTap">
        <!-- 显示头像图片 -->
        <open-data type="userAvatarUrl"></open-data>
      </view>
      <!-- 显示微信名字 -->
      <open-data type="userNickName"></open-data>
    </block>

<!-- 如果canIUseOpenData为false 同时!hasUserInfo为true 那么显示第二个block 而不显示第一个 -->
    <block wx:elif="{{!hasUserInfo}}">
      <!-- 如果canIUseGetUserProfile为true 显示按钮 点击使用新版获取用户信息的接口函数 -->
      <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
      <!-- 如果canIUseGetUserProfile为false canIUse为true 显示按钮 点击使用新版获取用户信息的接口函数 -->
      <button wx:elif="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
      <!-- 如果版本太旧了 新旧版本获取用户数据都不支持 -->
      <view wx:else> 请使用1.4.4及以上版本基础库 </view>
    </block>

<!-- 最后一个block -->
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </block>

  </view>

  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

这样就可以理解 初始代码的意思了