在页面初次加载时,组件(封装的隐私授权弹窗)中 wx:if 设置为 true 但无显示?
新的隐私授权处理,进页面时需要定位就会触发 wx.onNeedPrivacyAuthorization,打开隐私授权弹窗。多次编译发现有时会无弹窗显示,但监测数据 isShow 是正常变动到 true 的。这是什么原因,该如何处理呢? 在组件的 attached、ready 生命周期和页面的 show 生命周期中进行 popUp(弹窗显示)、或者刚进页面就触发 wx.onNeedPrivacyAuthorization,都会出现 wx:if 设置为 true 但不显示的问题。 使用 weui中的半屏组件 mp-half-screen-dialog(看了源码逻辑也是用的wx:if)或者直接自己写样式使用 wx:if 均存在此问题。 推测可能是部分异步加载基础库/小程序底层内容在此时未完全加载完成导致?开始设置了最短 40ms 的 setTimeout 但仍然存在此问题,应该不是任务轮次导致。 以下为涉及到此问题的代码,已去除部分与此问题无关的逻辑。 js 部分: data: {
isShow: false, // wx:if 绑定的字段
},
lifetimes: {
attached: function () {
const that = this
if (that.data._firstCheck) { // 传入属性,判断是否需要进页面时就确定授权情况
if (wx.canIUse('getPrivacySetting')) {
wx.getPrivacySetting({
success: (res) => {
if (res.needAuthorization) {
that.popUp()
}
}
})
}
}
},
},
pageLifetimes: {
show: function () {
const that = this
if (wx.canIUse('onNeedPrivacyAuthorization')) {
wx.onNeedPrivacyAuthorization(resolve => {
// 监听需授权事件,且仅处理最后一个被触发的需授权事件
that.data._privacyResolve = resolve
that.popUp()
})
}
},
},
methods: {
popUp() {
const that = this
if (that.data.isShow === false) {
that.setData({
isShow: true
})
}
}
}
})
wxml 部分: <mp-half-screen-dialog show="{{isShow}}" maskClosable="{{false}}" title="隐私提示" maskClosable="{{false}}" closabled="{{false}}">
<view slot="desc">
<text>隐私提示信息</text>
</view>
<view slot="footer">
<button type="default">不同意</button>
<button id="agree-btn" type="primary" open-type="agreePrivacyAuthorization">同意</button>
</view>
</mp-half-screen-dialog>