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

  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即是变化的值
    })
  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值