小程序页面监听app.js中globalData中的数据变化

发布时间:2024年01月04日
  App({
  globalData: {
    instrumentInfo: {
      deviceLists: [],
      ...
    },
    netType: '',
  },
  // 全局监听globalData的某个属性变化,并通知其他页面界面显示改变
  // key globalData中的属性值    okey  当globalData中的属性值为对象时需传入  method  值变化后的回调函数
  watch: function(key, okey, method) {
    // this.globalData里面的对象
    if (okey) {
      var obj = this.globalData[okey];
    }else{
      var 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) {
			this['_' + key] = value;
			method(value);
		},
		get: function() {
			// 在其他界面调用key值的时候,这里就会执行。
			if (typeof this['_' + key] == 'undefined') {
				if (ori) {
					//这里读取数据的时候隐藏变量和 globalData设置不一样,所以要做同步处理
					this['_' + key] = ori;
					return ori;
				} else {
					return undefined;
				}
			} else {
				return this['_' + key];
			}
		}
	})
  },
  
})

在页面中监听deviceLists和netType值得变化

    app.watch('deviceLists', 'instrumentInfo', (v) => {
      console.log(v);  //v即是变化的值
    })
    app.watch('netType', '', (val) => {
     console.log(v);  //v即是变化的值
    })
文章来源:https://blog.csdn.net/qq_45290368/article/details/135388924
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。