详解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 面向对象 重载
May 13 Javascript
根据一段代码浅谈Javascript闭包
Dec 14 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
JS数组去重(4种方法)
Mar 27 Javascript
node文件批量重命名的方法示例
Oct 23 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
javascript实现切割轮播效果
Nov 28 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python的range和linspace使用详解
2019/11/27 Python
Django权限设置及验证方式
2020/05/13 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
软件设计的目标是什么
2016/12/04 面试题
创业计划书的内容步骤和要领
2014/01/04 职场文书
宣传标语大全
2014/07/01 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
政风行风整改方案
2014/10/25 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL