详解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 18 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
node.js require() 源码解读
Dec 13 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
解决ie img标签内存泄漏的问题
Oct 13 Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 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
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python 读入多行数据的实例
2018/04/19 Python
Python正则表达式和元字符详解
2018/11/29 Python
python url 参数修改方法
2018/12/26 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
个人考核材料
2014/05/15 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
2016年寒假生活小结
2015/10/10 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python