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 18 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
vue使用element-ui实现表单验证
Dec 13 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
教你部署vue项目到docker
Apr 05 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 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排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
php include类文件超时问题处理
2015/02/06 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP打印输出函数汇总
2016/08/28 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
jquery 列表双向选择器之改进版
2013/08/09 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
python调用百度API实现人脸识别
2020/11/17 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
公司投资建议书
2014/05/16 职场文书
颐和园的导游词
2015/01/30 职场文书
升职自荐信范文
2015/03/27 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
如何利用React实现图片识别App
2022/02/18 Javascript