(4#)【已解决】微信小程序一个页面修改了全局变量,另一个页面却还是显示该变量的初始值

微信小程序踩坑记

问题描述:

做法:设想,在一个页面A的A.js中改变app.js中设置的某全局变量 theGlobalData 的值,然后在页面B的B.wxml上专门有一个{{theGlobalData}}用来获取并显示该全局变量值的表达式。
目的:上述做法目的是当我们在A.js中对一个变量做了变化,希望另一个页面B.wxml能够实时呈现该变量被改变后的值。
遇到的困难:A.js中改变的这个全局变量在B.wxml中还是显示原来的初始值,并没有因A.js中的赋值而改变。
各类尝试和调整
1. 是不是没用到this.setData({ }),导致我data里的值没被重新刷新和覆盖?用了。
2. 是不是没用var app=getApp()?也用了。
3. 是不是没用正确的赋值语句,如app.globalData.theGlobalData=xxxx?用了。
4. 其他页面C.js、D.js、F.js中用console.log(app.globalData.theGlobalData)显示一下,发现该语句放onLoad()中也是在控制台输出初始值,但是!用在其他函数方法中却是已经改变后的值!!如放在某个标签的点击方法中,点击就会输出改变后的值。
5. 在B.js中也做了步骤4的尝试,发现效果一样。B、C、D、F页面都是一样的情况!

结论:全局变量的值确实在A.js中改变了,只不过切换去其他页面时,这些页面没有再进行渲染,页面不重新渲染就表现出页面没有刷新一样,所以表现出该全局变量并没有在wxml上呈现新值。

解决办法:

在需要呈现该全局变量值的B、C、D、F等.wxml页面都在生命周期函数onShow中写上this.setData({ …})代码,这样才能实现切换到B页面就保证渲染一次.wxml文件,onShow该函数表示一旦呈现该页面在用户眼中时要做些什么动作。

在B.js中补上:

// 生命周期函数--监听页面显示
  onShow: function () {
    this.setData({
      theGlobalData: app.globalData.theGlobalData
    })
  },

在B.wxml中:

// 生命周期函数--监听页面显示
<text>显示新的全局变量值:{{theGlobalData}}</text>

哪里需要实时呈现全局变量数值,哪里的js文件就需要补上onShow方法中的代码,用点击事件的那种不必使用这个函数。

作者:跌坑记又更新一次,气死我了[○・`Д´・ ○]!!!

  • 32
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值