美文网首页
微信小程序实现全局变量监听数据变化

微信小程序实现全局变量监听数据变化

作者: A云A | 来源:发表于2019-05-31 21:07 被阅读0次

这里的核心是利用 Object.defineProperty 来实现的

//app.js
setWatching: function (key,method) {
        console.log('I am watching now '+key);
        let obj = this.globalData;
        //加个前缀生成隐藏变量,防止死循环发生
        let ori = obj[key];   //obj[key]这个不能放在Object.defineProperty里

        if (ori){    //处理已经声明的变量,绑定处理
            method(ori);
        }
        Object.defineProperty(obj, key, {
            configurable: true,
            enumerable: true,
            set: function (value) {
                console.log('setting ' + key+'  value ');
                this['___' + key] = value;
                method(value);    //数据有变化的时候回调函数,实现同步功能
            },
            get: function () {
                console.log('getting ' + key+'  value ');
                if (typeof this['__' + key] == 'undefined'){
                    if(ori){
                        //这里读取数据的时候隐藏变量和 globalData设置不一样,所以要做同步处理
                        this['__' + key] = ori;
                        return ori;
                    }else{
                        return undefined;
                    }
                }else{
                    return this['__' + key];
                }
            }
        })
    }
//components/debuger/index.js
const app = getApp();
Component({
    attached: function () {
        let that = this;
        app.setWatching('showDebug', (v)=>{
            that.setData({
                showDebug: app.globalData.showShop
            });
        });
    },
    /**
     * 组件的初始数据
     */
    data: {
        showDebug: false
    },

})

相关文章

网友评论

      本文标题:微信小程序实现全局变量监听数据变化

      本文链接:https://www.haomeiwen.com/subject/aamweqtx.html