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 的 v-model用法实例
Nov 23 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 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 根据自增id创建唯一编号类
2017/04/06 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
用Python编写web API的教程
2015/04/30 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
派出所所长先进事迹
2014/05/19 职场文书
学习十八大的心得体会
2014/09/01 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
二婚主持词
2015/06/30 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书