详解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身份证判断方法支持15位和18位
Mar 18 Javascript
代码获取历史上的今天发生的事
Apr 11 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
js获取url传值的方法
Dec 18 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
node.js缺少mysql模块运行报错的解决方法
Nov 13 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 Javascript
vue实现可移动的悬浮按钮
Mar 04 Vue.js
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 mssql 数据库分页SQL语句
2008/12/16 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python编写屏幕截图程序方法
2015/02/18 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python中Threading用法详解
2017/12/27 Python
python安装requests库的实例代码
2019/06/25 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
初中学校军训方案
2014/05/09 职场文书
2014年学生会工作总结
2014/11/07 职场文书
学校食品安全责任书
2015/01/29 职场文书
搞笑结婚保证书
2015/05/08 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
入门学习Go的基本语法
2021/07/07 Golang