收藏
回答

每个页面中的js文件中的data是在什么时候初始化的?是在小程序启动时还是在每个页面加载时?

业务场景:小程序启动---->进入启动页面(该页面异步请求,根据返回的用户角色决定所有其他页面的主题版本)---->其他页面

//启动页面伪代码:
onload:function(){
     wx.request({
      url: '登录接口地址', //仅为示例,并非真实的接口地址
      data: '入参'
      header: {
      'content-type': 'application/json' // 默认值
      },
      success (res) {
        //返回用户角色
        console.log(res.data)
        if(res.data.role = 'a'){
            app.globalData.themeColor = {--bg-color:red;}
        }else if(res.data.role = 'b'){
            app.globalData.themeColor = {--bg-color:green;}
        }else if(res.data.role = 'c'){
            app.globalData.themeColor = {--bg-color:blue;}
        }else {
            app.globalData.themeColor = {--bg-color: white;}
        }
      }
    })
 }

//about页等其他页面
Page({
  data:{
     themeColor:app.globalData.themeColor
  }
})


问题:进入其他页面时data中的themeColor竟然取不到值,想问下官方开发人员,所有页面的data的数据初始化是在哪个阶段完成的呢,为什么我在启动页已经设置上了,但是在其他页面的data中取不到值,只能在每个页面的onload中通过setData({themeColor:app.globalData.themeColor})才可以。



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

1 个回答

  • 卢霄霄
    卢霄霄
    2021-04-16

    是在app启动的时候,页面文件加载的时候就初始化好了。。比如你可以找个压根没显示的页面,在Page()外面 console.log随便打印个啥,然后你就知道是啥时候初始化的 data对象了。当然你更可以直接打个debugger,进去看看是什么时候

    2021-04-16
    有用
    回复 3
    • lοひё㊤疜雨兲
      lοひё㊤疜雨兲
      2021-04-16
      感谢回复!看来这个问题的解决方案只能是:在每个page的onload钩子函数中重新setData下,不过所有页面公用方法的优雅写法有没有?
      2021-04-16
      回复
    • 卢霄霄
      卢霄霄
      2021-04-16回复lοひё㊤疜雨兲
      封装一下 Page方法,社区里搜下吧
      2021-04-16
      回复
    • lοひё㊤疜雨兲
      lοひё㊤疜雨兲
      2021-04-16
      有类似vue,mixins的api就好了
      2021-04-16
      回复
登录 后发表内容
问题标签