收藏
回答

引用自定义组件方法线上报错

自定义了一个授权弹窗组件,里面有个显示或者关闭弹窗的方法openFn,在进入小程序首页的时候会判断用户是否授权获取用户信息,如果没有,会调用组件的openFn方法弹窗提示用户授权。

首页在onready里面获取组件实例,代码如下:

onReady() {
    this.authorize = this.selectComponent('#authorize')
    console.log(this.authorize,'onready+++打印组件实例')
  },

然后在onload里面调用一个方法判断用户是否授权,代码如下:

isAuthorize: function () {//判断用户是否授权
    let that = this;
    wx.getSetting({
      success(res) {
        if (res.authSetting && res.authSetting['scope.userInfo']) {  //用户有授权,直接调用函数进行登录  
          that.authorizeSuccFn()
        } else //用户未授权,弹窗引导用户授权
          that.setData({
            isOpensetting: false,
            authorizeMsg: '亲,该小程序需要授权用户信息才能使用'
          })
          that.authorize.openFn()
        }
      }
    })
  },

自己在本地调试工具和手机上测试都是没有问题,但是线上却一直报错,求大神指导下是怎么回事。 报错信息:


回答关注问题邀请回答
收藏

1 个回答

  • LastLeaf
    LastLeaf
    2019-01-18

    感觉可能是个时序问题。#authorize 是一开始就存在于页面中的吗?还是某次 setData 引入的?

    2019-01-18
    有用
    回复 9
    • Helen
      Helen
      2019-01-18

      谢谢回答,一开始就存在了,我是直接在页面引入的组件

      2019-01-18
      回复
    • LastLeaf
      LastLeaf
      2019-01-18回复Helen

      麻烦提供以下页面 WXML

      2019-01-18
      回复
    • Helen
      Helen
      2019-01-18回复LastLeaf


      页面组件

      2019-01-18
      回复
    • LastLeaf
      LastLeaf
      2019-01-18回复Helen

      懂了。


      this.authorize 是在 onReady 被赋值的。但是 wx.getSetting 的回调不能保证是在 onReady 之后的。有些情况下,机器的界面渲染比较慢会导致 onReady 返回也比较晚。如果页面里面本身就有这个节点的话,直接把 this.authorize 赋值放在 onLoad 的一开始就可以了。

      2019-01-18
      回复
    • Helen
      Helen
      2019-01-18

      好的 谢谢,明白了

      2019-01-18
      回复
    查看更多(4)
登录 后发表内容