详解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实现的页内搜索代码
May 23 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
Mar 04 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
《javascript少儿编程》location术语总结
May 27 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
原生js+ajax分页组件
Jan 30 Javascript
vue设置全局访问接口API地址操作
Aug 14 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设置images目录不充许http访问的方法
2016/11/01 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
js实现分页功能
2017/05/24 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
Vue 中mixin 的用法详解
2018/04/23 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
python操作redis的方法
2015/07/07 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python缩进和冒号详解
2016/06/01 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
详解python之协程gevent模块
2018/06/14 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python3+Appium安装使用教程
2019/07/05 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
python 星号(*)的多种用途
2020/09/21 Python
C# Debug和Testing相关面试题
2015/10/25 面试题
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
客服主管岗位职责
2013/12/13 职场文书
2015年统战工作总结
2015/05/19 职场文书