详解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 相关文章推荐
javascript web对话框与弹出窗口
Feb 22 Javascript
jQuery 第二课 操作包装集元素代码
Mar 14 Javascript
简单的两种Extjs formpanel加载数据的方式
Nov 09 Javascript
js写的方法实现上传图片之后查看大图
Mar 05 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
vue与vue-i18n结合实现后台数据的多语言切换方法
Mar 08 Javascript
JavaScript常见事件对象与操作实例总结
Jan 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 保留小数点
2009/04/21 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
php内嵌函数用法实例
2015/03/20 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
php经典趣味算法实例代码
2020/01/21 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
js实现计算器功能
2020/08/10 Javascript
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python write无法写入文件的解决方法
2019/01/23 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
详解Scrapy Redis入门实战
2020/11/18 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
微笑服务标语
2014/06/24 职场文书
2015年售票员工作总结
2015/04/29 职场文书
企业宣传稿范文
2015/07/23 职场文书