微信小程序学习问题记录

刚开始学习微信小程序,在基础框架学习中主要遇到以下两个问题:

一.button的点击跳转页面事件不被触发
app.json:

  "tabBar" : {
    "list" : [{
      "pagePath" : "../logs/logs" ,
      "text" : "text" ,
      "iconPath" : "iconPath" ,
      "selectedIconPath" : "selectedIconPath"
    }]

  }
index.js:
  //事件处理函数,由于路径../logs/logs已经再tapbar里被设置,所以此处button惦记事件不会被响应
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    })
  }

经过调查发现,是由于在app.json中设置了tapbar属性,只要是在tapbar中设置过的页面属性,是无法被任何其它事件触发的。

目前还不知道这是bug还是微信的特性

二.关于以下逻辑(回调与异步)的理解

          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this .globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if ( this .userInfoReadyCallback) {
                this .userInfoReadyCallback(res) //这里回调userInfoReadyCallback方法给用户信息赋值
              }
            }
          })


在尝试获取用户信息的时候,会判断 this .userInfoReadyCallback是否被赋值,如果被赋值,则Page的onload已经被调用。

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.userInfoReadyCallback就是在这里赋值
        this .setData({ //其实这里是一个回调函数,至于为什么不是app.userInfoReadyCallback(res){}
          hasUserInfo: true //由于对lamda表达式理解不深,有大神看到还望告知
        })
      }


即页面加载完毕,回调onLoad方法时,会给用户信息赋值,然而若此时getUserInfo尚未获得结果,就需要在getUserInfo之后,重新给用户信息赋值。这也充分体现了微信小程序里的方法都是异步处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值