<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindgetUserInfo">
获取头像昵称 </button>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
Page({
data: {
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse){
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
},
bindgetUserInfo: function(e) {
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
}
})
说明:1.用户如果没有授权过,那么需要用户点击button进行授权
用户点击button,触发bindgetUserInfo方法,我们就能够获取e.detail.userInfo的信息。这里的button想要获取用户信息,需要有open-type="getUserInfo"。还得有js代码canIUse: wx.canIUse('button.open-type.getUserInfo')。
2.用户如果授权过,那么app.globalData.userInfo里面存放着用户的信息。
但是,也有可能刚开始是拿不到的,获取用户信息有延迟,因此特别的,有一个专门的方法叫做app.userInfoReadyCallback,会在用户信息延迟结束后,给一个回调,这里我们获取用户信息。
3.早期的版本没有open-type=getUserInfo这个参数,同样也没有userInfoReadyCallback这个方法。这时候我们会向微信接口发送请求获取用户信息,不推荐。
用户userInfo信息详见:
https://developers.weixin.qq.com/miniprogram/dev/api/wx.getUserInfo.html