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

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

作者: 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