vue中watch的用法汇总


Posted in Vue.js onDecember 28, 2020

在vue中,使用watch来响应数据的变化。watch的用法大致有三种。

1. 常用用法

<input type="text" v-model="name"/>
new Vue({
 el: '#app',
 data: {
  name: '咸鱼'
 },
 watch: {
  name(newVal,oldVal) {
   // ...
  }
 } 
})

直接写一个监听处理函数,当每次监听到 name 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

watch: {
  name: 'nameChange'
 }

2 .立即执行(immediate和handler)

第一种用法watch有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。
比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。

new Vue({
 el: '#app',
 data: {
  name: ''
 },
 watch: {
  name: {
  handler(newVal,oldVal) {
   
// ...
  
},
  
immediate: true
  }
 } 
})

监听的数据后面写成对象形式,包含handler方法和immediate,之前我们写的函数其实就是在写这个handler方法;

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

3 .深度监听

当需要监听复杂数据类型(对象)的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

<input type="text" v-model="person.name"/>
new Vue({
 el: '#app',
 data: {
  person: {id: 1, name: '咸鱼'}
 },
 watch: {
  person: {
   handler(newVal,oldVal) {
   // ...
  },
  deep: true,
  immediate: true
  }
 } 
})

设置deep: true 则可以监听到person.name的变化,此时会给person的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

watch: {
  'person.name': {
   handler(newVal,oldVal) {
   // ...
   },
   deep: true,
   immediate: true
  }
 }

这样只会给对象的某个特定的属性加监听器。

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

以上就是vue中watch的用法汇总的详细内容,更多关于vue watch用法的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
浅析vue中的nextTick
Dec 28 #Vue.js
Vue实现省市区三级联动
Dec 27 #Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 #Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 #Vue.js
在vue项目中封装echarts的步骤
Dec 25 #Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 #Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 #Vue.js
You might like
博士208HAF收音机实习报告
2021/03/02 无线电
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
ajax缓存问题解决途径
2006/12/06 PHP
fgetcvs在linux的问题
2012/01/15 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
jquery控制display属性为none或block
2014/03/31 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python元字符的用法实例解析
2018/01/17 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
电大毕业生自我鉴定
2013/11/10 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
关于环保的建议书400字
2014/03/12 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
中学推普周活动总结
2015/05/07 职场文书
成绩单家长意见
2015/06/03 职场文书
特种设备安全管理制度
2015/08/06 职场文书
职工培训工作总结
2015/08/10 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS