收藏
回答

小程序js的data初始化问题?


碰到一个问题

app.globalData的代码如下:
 globalData: {
      id:0,
    }

当在A页面设置data
data: {
    idapp.globalData.id
},

在B页面给app.globalData.id赋值后跳转到A页面
 
    app.globalData.id=100
    wx.navigateTo({
      url: 'A',
    })

在A页面分别打印
 onShow: function () {
    console.log(app.globalData.id);
    console.log(this.data.id);
  },

输出结果为:

100
0


哪位大佬能告诉一下 原因么  万分感谢





最后一次编辑于  2020-04-22
回答关注问题邀请回答
收藏

3 个回答

  • 俞哄哄💻
    俞哄哄💻
    2020-04-22

    你可以再A页面在生命周期中进行赋值

     this.setData({
         id:app.globalData.id
       })
    

    若有帮助请帮忙点个"有用"谢谢↓↓

    2020-04-22
    有用 2
    回复 3
    • zzzzzz~
      zzzzzz~
      2020-04-22
      这个是可以 就是有点想明白为什么会这样
      2020-04-22
      回复
    • 俞哄哄💻
      俞哄哄💻
      2020-04-22回复zzzzzz~
      我这么认为的(可能不正确就是讨论下)
      data只在页面初始化一次你跳转回来的时候页面上的数据没有重新初始化导致的
      2020-04-22
      回复
    • zzzzzz~
      zzzzzz~
      2020-04-22回复俞哄哄💻
      因为是用的navigateTo跳转的 会执行A的onLoad以及路由栈里面也会出现新的A.  data却没有按照最新globalData的数据初始化 ,就觉得很不好理解
      2020-04-22
      回复
  • 倪西西
    倪西西
    2020-09-14

    我试了一下

    我小程序首页是 pages/index/index.js

    页面 pages/test/index.js 有如下代码:

    function test() {
      console.log('test');
      return 3;
    }
    
    Page({
      data: {
        testValue: test()
      },
    });
    
    


    小程序在启动首页时候(并没有导航到 pages/test/index.js),会log "test"。

    猜测: 小程序启动时候将所有引用的 Component 和 Page 中的 data 一次性初始化并缓存了, 之后每次进入页面都是取的最开始那个初始化的缓存值。

    骚操作。。。


    2020-09-14
    有用
    回复
  • peng
    peng
    2020-04-22

    感觉和路由有关系,切换到A时,A打开了原先的。https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html

    2020-04-22
    有用
    回复 2
    • zzzzzz~
      zzzzzz~
      2020-04-22
      但是路由栈里 会有两个A应该是新注册了一个A的
      2020-04-22
      回复
    • 可乐飞冰
      可乐飞冰
      2020-06-15
      跟路由没关系,就算是组件里使用的data字段,也会有这个问题,就算所有组件或者所有页面都不在栈里,最后重新进去结果还是第一次进的结果,这个我也遇到了,目测是因为data字段用了一个不确定的值,页面第一次进去初始化data之后,下次进去可能去的是上一次的值,即data被缓存了
      2020-06-15
      回复
登录 后发表内容
问题标签