详解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 相关文章推荐
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
Nov 14 Javascript
jquery利用ajax调用后台方法实例
Aug 23 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
关于js数组去重的问题小结
Jan 24 Javascript
jquery中one()方法的用法实例
Jan 16 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 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二分法在IP地址查询中的应用
2008/08/12 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
做网页的一些技巧
2007/02/01 Javascript
img的onload的另类用法
2008/01/10 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Python QQBot库的QQ聊天机器人
2019/06/19 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
在Python中COM口的调用方法
2019/07/03 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
python统计文章中单词出现次数实例
2020/02/27 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
特色冷饮店创业计划书
2014/01/28 职场文书
董事长助理工作职责
2014/06/08 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
稽核岗位职责范本
2015/04/13 职场文书
复试通知单模板
2015/04/24 职场文书
科技活动总结范文
2015/05/11 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript