自定义了一个授权弹窗组件,里面有个显示或者关闭弹窗的方法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() } } }) }, |
自己在本地调试工具和手机上测试都是没有问题,但是线上却一直报错,求大神指导下是怎么回事。 报错信息:
感觉可能是个时序问题。#authorize 是一开始就存在于页面中的吗?还是某次 setData 引入的?
谢谢回答,一开始就存在了,我是直接在页面引入的组件
麻烦提供以下页面 WXML
页面组件
懂了。
this
.authorize
是在 onReady 被赋值的。但是 wx.getSetting 的回调不能保证是在 onReady 之后的。有些情况下,机器的界面渲染比较慢会导致 onReady 返回也比较晚。如果页面里面本身就有这个节点的话,直接把this
.authorize
赋值放在 onLoad 的一开始就可以了。好的 谢谢,明白了