onWatch(path, callback) {
const obj = this.globalData;
const keys = path.split('.'); // 按照 '.' 拆分路径
let targetObj: any = obj;
// 遍历路径,找到目标对象
for (let i = 0; i < keys.length - 1; i++) {
if (!targetObj[keys[i]]) {
targetObj[keys[i]] = {}; // 如果路径不存在,则创建新对象
}
targetObj = targetObj[keys[i]];
}
const lastKey = keys[keys.length - 1];
let val = targetObj[lastKey]; // 获取当前值
Object.defineProperty(targetObj, lastKey, {
set: (value) => {
if (value !== val) { // 只有当新值与当前值不同时才触发回调
val = value;
callback(value); // 当值变化时触发回调
}
},
get: () => {
return val; // 返回当前值
}
});
},
globalData:{
userInfo: {
name:"",
age:0
监控userInfo时,必须整体修改userInfo才能触发回调;
监控userInfo.name时,必须只修改userInfo.name才能触发回调;
如何实现在整体修改userInfo或只修改userInfo.name时,都能触发回调。