详解Vue中watch的详细用法


Posted in Javascript onNovember 28, 2018

在vue中,使用watch来响应数据的变化。watch的用法大致有三种。下面代码是watch的一种简单的用法:

'''
 <input type="text" v-model="cityName"/>
 new Vue({
 el: '#root',
 data: {
 cityName: 'shanghai'
 },
 watch: {
 cityName(newName, oldName) {
 // ...
 }
 }
 })

'''

直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

'''
watch: {
 cityName: 'nameChange'
 }
 }
 '''

immediate和handler

这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。

'''
new Vue({
 el: '#root',
 data: {
 cityName: ''
 },
 watch: {
 cityName: {
handler(newName, oldName) {

// ...

},

immediate: true
 }
 }
 })
 '''

监听的数据后面写成对象形式,包含handler方法和immediate,之前我们写的函数其实就是在写这个handler方法;

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

deep

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

'''
 <input type="text" v-model="cityName.name"/>
 new Vue({
 el: '#root',
 data: {
 cityName: {id: 1, name: 'shanghai'}
 },
 watch: {
 cityName: {
 handler(newName, oldName) {
 // ...
 },
 deep: true,
 immediate: true
 }
 }
 })
 '''

设置deep: true 则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

'''
watch: {
 'cityName.name': {
 handler(newName, oldName) {
 // ...
 },
 deep: true,
 immediate: true
 }
 }
'''

总结

以上所述是小编给大家介绍的Vue中watch的详细用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
ExtJS 入门
Oct 29 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
JavaScript 学习笔记之数据类型
Jan 14 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
JS定义类的六种方式详解
May 12 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
Jul 08 jQuery
JavaScript new对象的四个过程实例浅析
Jul 31 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
Sep 10 Javascript
对VUE中的对象添加属性
Sep 18 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
js中关于Blob对象的介绍与使用
Nov 29 Javascript
vscode下的vue文件格式化问题
Nov 28 #Javascript
微信小程序如何获取用户收货地址
Nov 27 #Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 #Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
Nov 27 #Javascript
js canvas实现画图、滤镜效果
Nov 27 #Javascript
js canvas画布实现高斯模糊效果
Nov 27 #Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 #Javascript
You might like
PHP 实用代码收集
2010/01/22 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
vue vant Area组件使用详解
2019/12/09 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
在centos7中分布式部署pyspider
2017/05/03 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Win8下python3.5.1安装教程
2020/07/29 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
仓库管理专业个人的自我评价
2013/12/30 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
班主任自我评价范文
2015/03/11 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
闪闪红星观后感
2015/06/08 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
python字典的元素访问实例详解
2021/07/21 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python