微信小程序监听数值改变

363 阅读1分钟

app.js

 /**     * 监听属性 并执行监听函数     */    observe(obj, key, watchFun, deep, page) {        var val = obj[key];        // 判断deep是true 且 val不能为空 且 typeof val==='object'(数组内数值变化也需要深度监听)        if (deep && val != null && typeof val === 'object') {            Object.keys(val).forEach(childKey => { // 遍历val对象下的每一个key                this.observe(val, childKey, watchFun, deep, page); // 递归调用监听函数            })        }        var that = this;        Object.defineProperty(obj, key, {            configurable: true,            enumerable: true,            set: function (value) {                // 用page对象调用,改变函数内this指向,以便this.data访问data内的属性值                watchFun.call(page, value, val); // value是新值,val是旧值                val = value;                if (deep) { // 若是深度监听,重新监听该对象,以便监听其属性。                    that.observe(obj, key, watchFun, deep, page);                }            },            get: function () {                return val;            }        })    },

其他组件调用

getApp().observe(getApp(), 'countUnder', (val, old) => {      console.log('改变二零零零零零')      console.log(val)      console.log(old)      this.setData({        countUnder: val      })    }, true, this)