详解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 学习之二 属性相关
Nov 23 Javascript
js的for in循环和java里foreach循环的区别分析
Jan 28 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
基于jquery实现省市区三级联动效果
Dec 25 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
Mar 31 Javascript
CocosCreator入门教程之网络通信
Apr 16 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开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
Yii核心验证器api详解
2016/11/23 PHP
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Python中安装easy_install的方法
2018/11/18 Python
python获取地震信息 微信实时推送
2019/06/18 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript