Vue中watch的详细用法

简介: Vue中watch的详细用法

watch的作用可以监控一个值的变换,并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态。

简单来说就是,vue是数据双向绑定,当页面数据发生变化时,我们通过watch可以拿到变化前和变化后的值,之后做一系列操作,下面我们通过例子来解释。

1.监听单个值变化

<template>
  <div>
    <el-input v-model="demo"></el-input>
    <div>{{value}}</div>
  </div>
</template>
<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: '',
        value: ''
      };
    },
    watch: {
      demo(val,oldVal) {
        this.value = this.demo;
      }
    }
  };
</script>

复制

这个比较简单,我们用到了两个变量,demo和value,这里演示重点是value值是怎么变化的,我们监听的demo,这个demo通过v-model绑定到input,当input内容改变时,我们就把input里的值赋值到value。但是这个写法有个弊端,就是首次绑定不会执行监听函数,有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

上面写法可以替换成

<template>
  <div>
    <el-input v-model="demo"></el-input>
    <div>{{value}}</div>
  </div>
</template>
<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: '',
        value: ''
      };
    },
    watch: {
      demo:{
        handler(val,oldVal) {
           this.value = this.demo;
       },
     immediate: true
      }
    }
  };
</script>

复制

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

2.监听单个值变化,不同的是监听对象里面的

<template>
  <div>
    <el-input v-model="demo.name"></el-input>
    <div>{{value}}</div>
  </div>
</template>
<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: {
          name:'',
          age:'',
        },
        value: ''
      };
    },
    watch: {
      'demo.name'(val,oldVal) {
        this.value = this.demo;
      }
    }
  };
</script>

复制

这个和第一个例子实现的效果是同样的,但是区别在于绑定的是对象里的属性,

3.监听对象

<template>
  <div>
    <el-input v-model="demo.name"></el-input>
    <div>修改前的名字:{{name}}</div>    
    <div>修改后的名字:{{oldName}}</div>  
  </div>
</template>
<script>
  export default {
    name: 'index',
    data() {
      return {
        demo: {
          name:'',
          age:'',
        },
        name: '',
        oldName: '',
      };
    },
    watch: {
      demo: {
        handler:function(val,oldval){
          this.name = val.name
          this.oldName = oldVal.name
        },
        deep:true//对象内部的属性监听,也叫深度监听      
      }
    }
  };
</script>

复制

这种监听方式,监听了对象的所有属性,这样的方法对性能影响很大,修改里面任何一个属性都会触发这个监听器里的 handler。

相关文章
|
25天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
1天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
23 1
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
25天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
缓存 JavaScript
vue中computed和watch的区别
vue中computed和watch的区别
|
缓存 JavaScript
Vue 中 computed 和 watch 的区别
Vue 中 computed 和 watch 的区别
94 0
|
7月前
|
缓存 JavaScript
聊一聊Vue中的computed和watch区别
聊一聊Vue中的computed和watch区别
|
7月前
|
缓存 JavaScript
Vue 中的 computed 和 watch 的区别
Vue 中的 computed 和 watch 的区别
|
缓存 JavaScript 前端开发
Vue 中的 computed 和 watch 的区别
Vue 中的 computed 和 watch 的区别
218 0

相关实验场景

更多
下一篇
DataWorks