微信小程序项目实战(二)构建个人页面

这里来绘制一下个人页面,调用wx.login登录函数来展示用户信息。

构建个人页面

1.首先我们需要创建一个新的页面,表示为个人页面。
微信小程序项目实战(二)构建个人页面_第1张图片
2.在app.json文件中配置路由路径,一般创建好心的page的时候是会自动配置的,但是还是要来app.js文件的pages下面看一下是否已经配置了
微信小程序项目实战(二)构建个人页面_第2张图片
3.创建底部导航栏。使用tabBar进行创建,
设置默认字体颜色color
设置选中字体颜色selectedColor
设置模块list
设置模块中的跳转路径pagePath
设置模块中文字text
设置模块图标iconPath
设置模块选中图标selectedIconPath。
代码如下:

"tabBar": {
    "color": "#515151",
    "selectedColor": "#42bd56",
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页",
      "iconPath": "images/shouye.png",
      "selectedIconPath": "images/shouye_selected.png"
    },{
      "pagePath": "pages/personal/personal",
      "text": "我的",
      "iconPath": "images/wode.png",
      "selectedIconPath": "images/wode_selected.png"
    }]
  },

4.编写personal.wxml布局页面,并且通过一个按钮来点击获取用户信息。

<view class="container">
  <view class="avatar">
    <!-- getUserInfo 
    open-type设置这个属性,表示该按钮点击后是用来获取用户信息的
    bindgetuserinfo 表示点击后相应的方法
   
    而我们显示用户信息肯定是要在用户给予权限之后才进行显示,所以要加这个if判断-->
    <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo">微信登录</button>

    <block wx:else>
      <image src="{{userInfo.avatarUrl}}"></image>
      <text class="name">{{userInfo.nickName}}</text>
    </block>
  </view>

  <view class="info">
      <view class="section">
        <text>城市</text>
        <text>{{userInfo.city}}</text>
      </view>
      <view class="section">
        <text>性别</text>
        <text>{{userInfo.gender===1?"男":"女"}}</text>
      </view>
    </view>
</view>

5.编写person.wxss样式

.avatar{
  width: 100vw;
  height: 300rpx;
  background-color: #42bd56;
  color: #ffffff;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.avatar image{
  width: 150rpx;
  height: 150rpx;
  border-radius: 50%;
  margin-bottom: 30rpx;
}

.info .section{
  display: flex;
  justify-content: space-between;
  margin: 0 30rpx;
  border-bottom: 1px solid #ddd;
  height: 80rpx;
  line-height: 80rpx;
  font-size: 16px;
}

6.这里比较重要,编写personal.js文件,获取用户信息。
首先我们要在data里面设置数据源

  data: {
    userInfo: {},//用户数据
    hasUserInfo: false,//默认是没有用户信息
    canIUse: wx.canIUse('button.open-type.getUserInfo')//是否支持button上的授权,就是点击button弹出授权框
  },

然后在onLoad方法里面判断进行获取用户信息,这里要注意app.userInfoReadyCallback这个方法,设置了这个方法在app.js那里才能this点出来。

  onLoad: function (options) {
    //通过app.getlobalData.userInfo来判断用户信息是否存在,如果存在则直接设置用户信息
    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
          })
        }
      })
    }
  },

最后实现按钮上面bind的getUserInfo函数

  getUserInfo: function (e) {
    console.log(e)
    //通过userInfo是否存在来判断是否允许
    if(e.detail.userInfo){
      app.globalData.userInfo = e.detail.userInfo
      this.setData({
        userInfo: e.detail.userInfo,
        hasUserInfo: true
      })
    } 
  },

personal.js的所有代码如下:

// miniprogram/pages/personal/personal.js
let app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {},//用户数据
    hasUserInfo: false,//默认是没有用户信息
    canIUse: wx.canIUse('button.open-type.getUserInfo')//是否支持button上的授权,就是点击button弹出授权框
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //通过app.getlobalData.userInfo来判断用户信息是否存在,如果存在则直接设置用户信息
    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
          })
        }
      })
    }
  },
  getUserInfo: function (e) {
    console.log(e)
    //通过userInfo是否存在来判断是否允许
    if(e.detail.userInfo){
      app.globalData.userInfo = e.detail.userInfo
      this.setData({
        userInfo: e.detail.userInfo,
        hasUserInfo: true
      })
    } 
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

获取展示

保存可以看到这样一个界面,没有展示任何信息,只是展示了一个微信登录的按钮。
微信小程序项目实战(二)构建个人页面_第3张图片
点击微信登录,弹出授权框
微信小程序项目实战(二)构建个人页面_第4张图片
点击允许,就可以看到控制台有打印相应的数据,并且展示在了左边的模拟器上面
微信小程序项目实战(二)构建个人页面_第5张图片
到这里就绘制好了一个个人界面了。

这里额外提一点button绑定的函数里面的if判断

  getUserInfo: function (e) {
    console.log(e)
    //通过userInfo是否存在来判断是否允许
    if(e.detail.userInfo){
      app.globalData.userInfo = e.detail.userInfo
      this.setData({
        userInfo: e.detail.userInfo,
        hasUserInfo: true
      })
    } 
  }

为什么要加这个e.detail.userInfo?我们可以看到在personal.wxml里面有这样一句代码

<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo">微信登录</button>

当hasUserInfo 不为true且canIUse的时候显示微信登录的按钮,而在getUserInfo函数中,我们最后将hasUserInfo设置为了 true,所以当我们点击微信登录,在弹框选择的时候选择拒绝这个按钮会消失。
微信小程序项目实战(二)构建个人页面_第6张图片

微信小程序项目实战(二)构建个人页面_第7张图片
按钮不见了。
微信小程序项目实战(二)构建个人页面_第8张图片
这时候我们来看控制台,控制台输出的数据并没有userInfo这个对象,所以在peronal.wxml里面也无法获取到对应的数据并展示。
微信小程序项目实战(二)构建个人页面_第9张图片
所以我们需要通过userInfo(e.detail.userInfo)这个对象来判断是否获取成功,如果没有成功则不设置数据,也不将hasUserInfo设置为true。
再看一次控制台,在给予权限的情况下,获取到的数据,就知道为什么是e.detail.userInfo了。e代表整个最外层返回的data,然后data下面的detail,在然后detail下面的userInfo
微信小程序项目实战(二)构建个人页面_第10张图片
好了,到这里就真的结束了绘制一个个人页面。

你可能感兴趣的:(微信小程序,小程序)