Vue 'watch' 选项

实例

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

  1. export default {
  2. data() {
  3. return {
  4. rangeVal: 4
  5. };
  6. },
  7. watch: {
  8. rangeVal(val) {
  9. if( val>20 && val<70) {
  10. if(val<40){
  11. this.rangeVal = 20;
  12. }
  13. else {
  14. this.rangeVal = 70;
  15. }
  16. }
  17. }
  18. }
  19. };

定义与用法

watch 选项是一个包含 Vue 实例上声明的所有 watcher 观察程序的对象。

watcher 观察程序是一个与数据属性或计算属性同名的函数。只要具有相同名称的属性发生更改,就会自动调用观察程序。

调用 watcher 时,新值和以前的值可作为 watcher 函数的参数。

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

当使用对象语法(参见下面的实例)编写 watcher 时,这些选项可用:

选项描述
handler这是 watch 函数的写入位置。
'method name'通过以字符串形式提供方法名称,可以设置 watcher 来调用方法。
deep默认值为 'false'。如果 watcher 是 deep,那么它也会对 watcher 设置为 watch 属性的进一步更改作出反应
immediate创建 watcher 后立即触发该 watcher 当 'immediate' 设置为 'true' 时,第一次触发 watcher 时,旧值将为 'undefined'
flush默认值为 'pre'。指定相对于呈现组件的时间运行回调函数的时间可能的值为 'pre', 'post' 和 'sync'。请谨慎使用 flush 选项。
onTrigger/onTrack用于调试仅适用于开发模式。
注意:也可以使用 $watch() 方法创建观察程序。

更多实例

实例

使用对象语法的 watcher。

  1. <template>
  2. <h2>Example watch Option</h2>
  3. <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>
  4. <input type="range" v-model="rangeVal">
  5. <p>rangeVal: <span>{{ rangeVal }}</span></p>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. rangeVal: 40
  12. };
  13. },
  14. watch: {
  15. rangeVal: {
  16. handler(val) {
  17. if (val > 20 && val < 70) {
  18. if (val < 40) {
  19. this.rangeVal = 20;
  20. }
  21. else {
  22. this.rangeVal = 70;
  23. }
  24. }
  25. },
  26. immediate: true
  27. }
  28. }
  29. };
  30. </script>
  31. <style>
  32. span {
  33. padding: 3px;
  34. font-weight: bold;
  35. font-family: 'Courier New', Courier, monospace;
  36. background-color: lightgreen;
  37. }
  38. </style>

关联页面

Vue 教程 : Vue 观察程序

Vue 教程: Vue v-model 指令

Vue 参考引用: Vue $watch() 方法

分类导航