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 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
vue如何在data中引入图片的正确路径
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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
php-fpm中max_children的配置
2019/03/15 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
Python登录注册验证功能实现
2018/06/18 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
python实现静态web服务器
2019/09/03 Python
Series和DataFrame使用简单入门
2019/11/13 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
python同时遍历两个list用法说明
2020/05/02 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
《燕子专列》教学反思
2014/02/21 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
商铺消防安全责任书
2014/07/29 职场文书
道德与公民自我评价
2015/03/09 职场文书
春节慰问简报
2015/07/21 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技