详解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 相关文章推荐
js鼠标左右键 键盘值小结
Jun 11 Javascript
addEventListener 的用法示例介绍
May 07 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
node跨域请求方法小结
Aug 25 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 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/03 咖啡文化
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
详解使用webpack构建多页面应用
2017/12/21 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
详细分析vue响应式原理
2020/06/22 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python中获取对象信息的方法
2015/04/27 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
淘宝活动策划方案
2014/02/06 职场文书
2014年百日安全生产活动总结
2014/05/04 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
新学期家长寄语2016
2015/12/03 职场文书
员工升职自我评价
2019/03/26 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python