详解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 concat数组累加 示例
Sep 03 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
Jan 21 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
PHP abstract与interface之间的区别
Nov 11 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
Aug 21 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
May 22 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 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判断所处服务器操作系统的类型
2013/06/20 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
jQuery中:header选择器用法实例
2014/12/29 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python读写文件基础知识点
2019/06/10 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
strstr()的简单实现
2013/09/26 面试题
自我评价如何写好?
2014/01/05 职场文书
双十佳事迹材料
2014/01/29 职场文书
科级干部考察材料
2014/02/15 职场文书
小学语文业务学习材料
2014/06/02 职场文书
大连星海广场导游词
2015/02/10 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
第一军规观后感
2015/06/12 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB
pandas求平均数和中位数的方法实例
2021/08/04 Python