Vue 'watch' 选项


示例

watch 选项中使用观察器,使得无法使用 <input type="range"> 选择 20 到 70 之间的值。

export default {
  data() {
    return {
      rangeVal: 4
    };
  },
  watch: {
    rangeVal(val) {
      if( val>20 && val<70) {
        if(val<40){
          this.rangeVal = 20;
        }
        else {
          this.rangeVal = 70;
        }
      }
    }
  }
};
运行示例 »

定义和用法

watch 选项是一个对象,其中包含在 Vue 实例上声明的所有观察者。

观察者是一个与数据属性或计算属性同名的函数。 每当同名的属性发生更改时,都会自动调用观察程序。

当调用观察程序时,新值和以前的值可作为观察程序函数的参数。

观察程序也可以是点分隔的路径,例如 tiger.weight,这样只有当 tiger 对象的 weight 属性更改时才会调用观察程序。

注意:声明观察者时应避免使用箭头函数,因为无法使用 this 关键字从此类函数内部访问 Vue 实例。

使用对象语法编写观察程序时(请参见下面的示例),这些选项可用:

选项 描述
handler 这是编写watch函数的地方。
'method name' 可以通过提供字符串形式的方法名称来设置观察程序来调用方法。
deep 默认值为"false"。 如果观察者为 deep,它也会对观察者设置要观察的属性中进一步的变化做出反应。
immediate 默认值为"false"。 创建后立即触发观察者。 当"immediate"设置为"true"时,第一次触发观察者时,旧值将为"undefined"。
flush 默认值为"pre"。 指定相对于组件渲染时间运行回调函数的时间。 可能的值为"pre"、"post"和"sync"。 请谨慎使用此 flush 刷新选项。
onTrigger/onTrack 用于调试。 仅适用于开发模式。

注意:观察者也可以使用$watch()方法创建。


更多示例

示例

通过对象语法使用观察器。

<template>
  <h2>示例 watch 选项</h2>
  <p>The 'rangeVal' watcher is written with the object syntax, with immediate: true, so that rangeVal is moved to '70' when the page first loads:</p>
  <input type="range" v-model="rangeVal">
  <p>rangeVal: <span>{{ rangeVal }}</span></p>
</template>

<script>
export default {
  data() {
    return {
      rangeVal: 40
    };
  },
  watch: {
    rangeVal: {
      handler(val) {
        if (val > 20 && val < 70) {
          if (val < 40) {
            this.rangeVal = 20;
          }
          else {
            this.rangeVal = 70;
          }
        }
      },
      immediate: true
    }
  }
};
</script>

<style>
span {
  padding: 3px;
  font-weight: bold;
  font-family: 'Courier New', Courier, monospace;
  background-color: lightgreen;
}
</style>
运行示例 »

相关页面

Vue 教程:Vue 观察者

Vue 教程:Vue v-model 指令

Vue 参考:Vue $watch() 方法