// app.js
onLaunch(options) {
wx.getSystemInfo({
success(res) {
console.log('wx.getSystemInfo==', res)
}
})
}
// 自定义组件
lifetimes: {
attached: function() {
// 在组件实例进入页面节点树时执行
console.log('attached==')
}
}
// 在编译器中执行结果如下:
// attached==
// wx.getSystemInfo==
// 希望大佬出来指点一下,如何让组件attached钩子中能获取到onLaunch钩子中wx.getSystemInfo的res
// 号外话题:评论发表时,怎么一开始先点了代码后就不能再在代码框外面输入内容了呢?3333333
wx.getSystemInfo属于异步请求
自定义组件(我这里是自定义导航组件)的attached钩子 与 页面渲染生命周期中的钩子onload等钩子执行顺序上,与Vue的组件渲染过程类似,也是子组件先执行,这问题无可避免。
解决思路:
使用wx:if="{{loading}}"(loading初始值为false)把自定义导航组件以及其他业务组件先移除,同时可添加加载组件作为下一步请求wx.getSystemInfo过程的提示。使用promise包装wx.getSystemInfo变成同步函数a,在页面onload等钩子中,执行该函数,等函数a返回后,这时候拿到了手机状态栏高度等自定义导航设置所需数据,此时将loading改为true。此时自动触发自定义导航组件的attached钩子,设置自定义导航组件的高度等。这样自定义导航组件可完成。
如此是自定义导航组件的核心思路,社区中自定义导航组件思路均没遇到子组件钩子于页面onload先触发机制的问题,反正在我这里不好使。
试一试就知道了啊
你好,试一下把wx.getSystemInfo存到storage或者globaldata试试看?