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从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
详解Vue3使用axios的配置教程
Apr 29 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 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
javascript闭包入门示例
2014/04/30 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
js文字横向滚动特效
2015/11/11 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
js实现拖拽功能
2017/03/01 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
Python MD5文件生成码
2009/01/12 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
python变量的作用域是什么
2020/05/26 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
爱祖国演讲稿
2014/05/04 职场文书
让子弹飞观后感
2015/06/11 职场文书
世界名著读书笔记
2015/06/25 职场文书
公司考勤管理制度
2015/08/04 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
如何利用python创作字符画
2022/06/25 Python