微信小程序踩坑记
问题描述:
做法:设想,在一个页面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中:
// 生命周期函数--监听页面显示
显示新的全局变量值:{{theGlobalData}}
哪里需要实时呈现全局变量数值,哪里的js文件就需要补上onShow方法中的代码,用点击事件的那种不必使用这个函数。
作者:跌坑记又更新一次,气死我了[○・`Д´・ ○]!!!
标签:theGlobalData,wxml,微信,app,初始值,js,全局变量,页面
来源: https://blog.csdn.net/yang_ri/article/details/90300432