首先说下问题:
当我在app.js页面异步获取到的值,放在 globalData 中,然后我再其他一个页面取值,发现并取不到,陷入了沉思…… 一开始的思路是,想到Vue的监听事件, 但是后来发现,并不可取。
原因
在app里获取基础数据 如用户信息、用户地址等 在其他页面调取时 往往app数据还没有获取 其他页面已经进入onLoad生命周期,所以会出现这个问题。
下面提供两套方案,可供选择~
- 方法一:小程序没有很好的监听方法,我的做法是增加一个启动页,在启动页面里调用加载需要的初始化数据(譬如:各种授权乱七八糟等……),确保所有数据都被加载,再执行其他的。
- 方法二:在app.js写一个回调函数,然后在其他需要用到的页面来调用即可。
方法一就不多赘述,因为没啥说的。
方法二:
app.js
…………
qqmapsdk.reverseGeocoder({
location: {
latitude: latitude,
longitude: longitude
},
success: function (res) {
// console.log(JSON.stringify(res));
let {ad_info} = res.result;
let address = `${ad_info.province},${ad_info.city},${ad_info.district}`
let _postion = {
latitude: ad_info.location.lat,
longitude: ad_info.location.lng,
address,
it_info: res.result.address_component
}
_self.globalData.lat = ad_info.location.lat;
_self.globalData.lon = ad_info.location.lng;
wx.setStorageSync('position', _postion)
*** // 解决小程序异步获取的, 首页获取不到数据的问题, 增加一个回调 ***
if (_self.loaclCallBack) {
_self.loaclCallBack(res)
}
},
fail: function (res) {
// console.log(res);
},
complete: function (res) {
// console.log(res);
}
});
…………
loaclCallBack() 这个方法名自定义随便起。
需要用到调用的js中:
onLoad (options) {
let _self = this
app.loaclCallBack = function () {
// 这里面就可以拿到 globalData 里的值了~
}
}