(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方法中的代码,用点击事件的那种不必使用这个函数。

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

你可能感兴趣的:(微信小程序踩坑记,微信小程序全局变量传值无效,小程序获取全局变量的问题,多页面使用同一个全局变量的问题,小程序实时呈现全局变量的值)