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
37
38
39
40
| const observe = (obj, key, watchFun, deep, page) => {
| let val = obj[key];
| if (val != null && typeof val === "object" && deep) {
| Object.keys(val).forEach((item) => {
| observe(val, item, watchFun, deep, page);
| });
| }
| Object.defineProperty(obj, key, {
| configurable: true,
| enumerable: true,
| set: (value) => {
| watchFun.call(page, value, val);
| val = value;
| if (deep) {
| observe(obj, key, watchFun, deep, page);
| }
| },
| get: () => {
| return val;
| }
| });
| }
| const setWatcher = (page) => {
| let data = page.data;
| let watch = page.watch;
| Object.keys(watch).forEach((item) => {
| let targetData = data;
| let keys = item.split(".");
| for (let i = 0; i < keys.length - 1; i++) {
| targetData = targetData[keys[i]];
| }
| let targetKey = keys[keys.length - 1];
| let watchFun = watch[item].handler || watch[item];
| let deep = watch[item].deep;
| observe(targetData, targetKey, watchFun, deep, page);
| });
| }
| module.exports = {
| setWatcher
| };
|
|