关于在vue中watch的一些运用

59 阅读1分钟

# watch 的方法和属性

watch: {
  name: {
    handler(newVal, oldVal) {
      console.log(newVal, oldVal);
    }
  }
}

### immediate 属性

这个属性存在的原因在于 watch 有一个特点:当一个值第一次被绑定时,是不会执行[监听]函数( watch )的,只有当值发生了改变才回去执行。
当我们需要在最初绑定值的时候,就对该值执行监听,那就用到了这个属性。

watch: {
  name: {
    handler(newVal, oldVal) {
      console.log(newVal, oldVal);
    },
    immediate: true
  }
}

### deep 属性

当需要监听一个对象的改变时,以上的监听方式已经不能满足,原因是受到 JavaScript 的限制(以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除,导致我们对一个对象的监听是无效的。
此时,我们需要使用 deep 属性对对象进行[深度]监听。

watch: {
  obj: {
    handler(newVal, oldVal) {
      console.log(newVal, oldVal);
    },
    deep: true
  }
}

深度监听的方法

1.使用 deep 属性

// 开启深度监听 deep: true

2.使用 computed 计算属性监听

  computed: {
    toBet(){
      return JSON.parse(JSON.stringify(this.bet))
    }
  }

!!! 对象也是可以立即监听的 我们可以选择监听对象中的某一个属性 可以避免一些问题{不会出现新旧值都一样的情况}

  1. toBet.count
  2. toBet