El applet de WeChat implementa la supervisión del reloj

El applet nativo de WeChat no tiene la API de reloj, así que implementemos una a mano.

使用 Object.defineProperty() 方法,劫持对象的 getter/setter ,从而实现给对象赋值时(调用 setter),执行 watch 对象中相对应的函数,达到监听效果。

Crea un archivo js

function 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: function (value) {
      watchFun.call(page, value, val);
      val = value;
      if (deep) {
        observe(obj, key, watchFun, deep, page);
      }
    },
    get: function () {
      return val;
    }
  });
}
export function 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);
  });
}

¿Cómo usarlo?

import * as watch from "./watch.js";

data: {
     num:1
},
onLoad() {
	 watch.setWatcher(this);
},
	
watch: {    
	 num: function(newVal, oldVal) {      
		console.log(newVal, oldVal);
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45389051/article/details/114538917
Recomendado
Clasificación