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 组件注册
Nov 20 Vue.js
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue实现列表垂直无缝滚动
Apr 08 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 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-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
详解php中反射的应用
2016/03/15 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
js给selected添加options的方法
2015/05/06 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
谈谈python垃圾回收机制
2020/09/27 Python
python制作微博图片爬取工具
2021/01/16 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
会计专业自荐信
2014/06/03 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
工人先锋号申报材料
2014/12/29 职场文书
辞职信格式模板
2015/02/27 职场文书
会计主管岗位职责
2015/04/02 职场文书