小程序实现数据监听

项目描述:

本人是这个项目中需要使用websocket返回的数据,但是websocet如果放在页面中切换就会频繁的断开重连。这是不切实际的。

所以将websocket写在了app.js下面,但是问题也随之而来。虽然app.js下面数据实时变化,但是我websocket的数据不会对应实时更新到别的页面。

最后感谢简书的一位大佬,具体链接在最后

代码部分:

//app.js
App({
  onLaunch: function() {},
  util: { showToast },
  //实现数据监听,其他页面自动获取app.js页面数据,注意修改数据方式:this.sockData.data = 'pxh'
  watch:function(method){
    var obj = this.sockData;
    Object.defineProperty(obj,"data", {
      configurable: true,
      enumerable: true,
      set: function (value) {
        //console.log("监听数据已修改");
        this._data = value;
        method(value);
      },
      get:function(){
        // 可以在这里打印一些东西,然后在其他界面调用getApp().globalData.name的时候,这里就会执行。
        return this._data;
      }
    })
  },
  //websocket数据,取用数据两个都可以,推荐使用app.sockData.data
  //websocket数据控制点
  sockData: {
    _data:null,
    data: null,
  },
  globalData: {
  }
});
其他页面使用:
onLoad: function (options) {
    let that = this;
    getApp().watch(that.watchBack)
  },
  watchBack: function (name){
    console.log(22222);
    console.log('this.name==' + name)
  }
代码大概就是这个情况,但是我个人测试得到,监听必须是个对象,并且不能直接监听并且修改data值,所以做了转化,变成_data,这个说实在我个人为了完成项目,没有去仔细阅读文档。如果有大佬愿意指点,谢谢留言。
我个人希望sockData下面只有data这么一个,而不需要_data进行转化。
不过上面代码都是可以直接使用的。

简书文章地址:https://www.jianshu.com/p/8d1c4626f9a3

你可能感兴趣的:(javascript,微信小程序,vue,前端)