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。

相关文章
|
4月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
404 2
|
3月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
363 137
|
7月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
895 0
|
6月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
526 1
|
6月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
342 0
|
9月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1169 4
|
7月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
8月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
1096 78
|
9月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
7月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
532 17