微信小程序app.js异步获取的值存在globalData中如何在其他页面获取

3,678 阅读1分钟
首先说下问题:

当我在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 里的值了~
       }
    
}

解决了。