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-cli 创建模板项目
Nov 19 Vue.js
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
详解Vue中的自定义指令
Dec 07 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
详解Vue的options
May 15 Vue.js
Vue Mint UI mt-swipe的使用方式
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 curl 获取响应的状态码的方法
2014/01/13 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python关闭windows进程的方法
2015/04/18 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Python如何执行系统命令
2020/09/23 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
2014年营销工作总结
2014/11/22 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
唐山大地震的观后感
2015/06/05 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python