这里的核心是利用 Object.defineProperty 来实现的
//app.js
setWatching: function (key,method) {
console.log('I am watching now '+key);
let 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) {
console.log('setting ' + key+' value ');
this['___' + key] = value;
method(value); //数据有变化的时候回调函数,实现同步功能
},
get: function () {
console.log('getting ' + key+' value ');
if (typeof this['__' + key] == 'undefined'){
if(ori){
//这里读取数据的时候隐藏变量和 globalData设置不一样,所以要做同步处理
this['__' + key] = ori;
return ori;
}else{
return undefined;
}
}else{
return this['__' + key];
}
}
})
}
//components/debuger/index.js
const app = getApp();
Component({
attached: function () {
let that = this;
app.setWatching('showDebug', (v)=>{
that.setData({
showDebug: app.globalData.showShop
});
});
},
/**
* 组件的初始数据
*/
data: {
showDebug: false
},
})
网友评论