2024-06-27-【工程化】H5真机调试

方案 1 - defineProperty

  • app.js 中注册
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
watch: function (variate, method) {
const obj = this.globalData;
// 单独变量来存储原来的值
let val = obj[variate];
Object.defineProperty(obj, variate, {
// configurable 可重复配置
configurable: false,
enumerable: true,
set: function (value) {
val = value;
method(variate, value);
},
get: function () {
// 在其他界面调用getApp().globalData.variate的时候,这里就会执行。
return val;
},
});
},
  • 升级版,批量监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
watch(variate, method) {
const obj = this.globalData;
const { listenerMap } = obj;
// 单独变量来存储原来的值
let val = obj[variate];
// 扩展同一个变量 可设置多个监听 2024-07-16 11:13:33
if (!listenerMap[variate]) {
listenerMap[variate] = [];
// 仅初始化一次,不能重复劫持,重复劫持会被覆盖
Object.defineProperty(obj, variate, {
// configurable 可重复配置
configurable: true,
enumerable: true,
set(value) {
val = value;
listenerMap[variate]
&& listenerMap[variate].forEach((listener) => {
listener(value);
});
},
get() {
// 在其他界面调用getApp().globalData.variate的时候,这里就会执行。
return val;
},
});
}
listenerMap[variate].push(method);
},
unWatch(variate, method) {
const obj = this.globalData;
const index = obj.listenerMap[variate] ? obj.listenerMap[variate].indexOf(method) : -1;
if (index > -1) {
obj.listenerMap[variate].splice(index, 1);
}
// console.log(obj.listenerMap);
},

2024-06-27-【工程化】H5真机调试
https://zhangyingxuan.github.io/2024-06-27-【小程序】小程序全局变量监听/
作者
blowsysun
许可协议