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 30 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
vue @ ~ 相对路径 路径别名设置方式
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 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php自动加载方式集合
2016/04/04 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
js中function()使用方法
2013/12/24 Javascript
JS常用函数使用指南
2014/11/23 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
js判断节假日实例代码
2017/12/27 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python实现kMeans算法
2017/12/21 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
python烟花效果的代码实例
2020/02/25 Python
python获取栅格点和面值的实现
2020/03/10 Python
在宿舍喝酒的检讨书
2014/09/28 职场文书
公安机关起诉意见书
2015/05/20 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python