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 26 Vue.js
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 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文件中是否含有bom的函数
2012/05/31 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
python使用cookie库操保存cookie详解
2014/03/03 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Python编写单元测试代码实例
2020/09/10 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
介绍一下Python中webbrowser的用法
2013/05/07 面试题
优秀党员主要事迹
2014/01/19 职场文书
委托书的写法
2014/09/16 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2014年居委会工作总结
2014/12/09 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
2015年化验员工作总结
2015/04/10 职场文书
战马观后感
2015/06/08 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers