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 相关文章推荐
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
vue ref如何获取子组件属性值
Mar 31 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
人族 TERRAN 概述
2020/03/14 星际争霸
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
详解Vue SPA项目优化小记
2018/07/03 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python3实现windows下同名进程监控
2018/06/21 Python
Django实现发送邮件功能
2019/07/18 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
美国零售商店:Blue&Cream
2017/04/07 全球购物
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
文明礼仪小标兵事迹
2014/01/12 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
个人自我鉴定总结
2014/03/25 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
周一给客户的问候语
2015/11/10 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书