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 相关文章推荐
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 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
php目录管理函数小结
2008/09/10 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
Django中ORM的基本使用教程
2020/12/22 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
文秘专业大学生求职信
2013/11/10 职场文书
2014年教师节寄语
2014/04/03 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
情况说明书格式及范文
2019/06/24 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
人民币符号
2022/02/17 杂记
使用Redis实现分布式锁的方法
2022/06/16 Redis