项目描述:
本人是这个项目中需要使用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