收藏
回答

app.js中onLanuch钩子与自定义组件生命周期attached钩子,执行顺序先后?

// 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
回答关注问题邀请回答
收藏

3 个回答

  • 逐渐阔朗的呼噜
    逐渐阔朗的呼噜
    2020-09-14

    wx.getSystemInfo属于异步请求

    自定义组件(我这里是自定义导航组件)的attached钩子 与 页面渲染生命周期中的钩子onload等钩子执行顺序上,与Vue的组件渲染过程类似,也是子组件先执行,这问题无可避免。

    解决思路:

    使用wx:if="{{loading}}"(loading初始值为false)把自定义导航组件以及其他业务组件先移除,同时可添加加载组件作为下一步请求wx.getSystemInfo过程的提示。使用promise包装wx.getSystemInfo变成同步函数a,在页面onload等钩子中,执行该函数,等函数a返回后,这时候拿到了手机状态栏高度等自定义导航设置所需数据,此时将loading改为true。此时自动触发自定义导航组件的attached钩子,设置自定义导航组件的高度等。这样自定义导航组件可完成。

    如此是自定义导航组件的核心思路,社区中自定义导航组件思路均没遇到子组件钩子于页面onload先触发机制的问题,反正在我这里不好使。

    2020-09-14
    有用
    回复
  • ㅤ
    2020-09-11

    试一试就知道了啊


    2020-09-11
    有用
    回复
  • Cjiang
    Cjiang
    2020-09-09

    你好,试一下把wx.getSystemInfo存到storage或者globaldata试试看?

    2020-09-09
    有用
    回复
登录 后发表内容
问题标签