App({
globalData: {
instrumentInfo: {
deviceLists: [],
...
},
netType: '',
},
// 全局监听globalData的某个属性变化,并通知其他页面界面显示改变
// key globalData中的属性值 okey 当globalData中的属性值为对象时需传入 method 值变化后的回调函数
watch: function(key, okey, method) {
// this.globalData里面的对象
if (okey) {
var obj = this.globalData[okey];
}else{
var obj = this.globalData;
}
//加个前缀生成隐藏变量,防止死循环发生
let ori = obj[key]; //obj[key]这个不能放在Object.defineProperty里
if (ori) { //处理已经声明的变量,绑定处理
method(ori);
}
Object.defineProperty(obj, key, {
configurable: true,
enumerable: true,
set: function(value) {
this['_' + key] = value;
method(value);
},
get: function() {
// 在其他界面调用key值的时候,这里就会执行。
if (typeof this['_' + key] == 'undefined') {
if (ori) {
//这里读取数据的时候隐藏变量和 globalData设置不一样,所以要做同步处理
this['_' + key] = ori;
return ori;
} else {
return undefined;
}
} else {
return this['_' + key];
}
}
})
},
})
在页面中监听deviceLists和netType值得变化
app.watch('deviceLists', 'instrumentInfo', (v) => {
console.log(v); //v即是变化的值
})
app.watch('netType', '', (val) => {
console.log(v); //v即是变化的值
})