详解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 存在陷阱 删除某一区域所有节点
May 10 Javascript
jquery实现上下左右滑动的方法
Feb 09 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
微信小程序--组件(swiper)详细介绍
Jun 13 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
详解webpack 入门与解析
Apr 09 Javascript
使用Javascript简单计算器
Nov 17 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
Vue实现简单计算器案例
Feb 25 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 Javascript
微信小程序自定义底部弹出框动画
Nov 18 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/09/13 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
在Python中使用元类的教程
2015/04/28 Python
python友情链接检查方法
2015/07/08 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
python实现AdaBoost算法的示例
2020/10/03 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
文秘专业自荐信
2013/10/14 职场文书
销售会计工作职责
2013/12/02 职场文书
单位未婚证明范本
2014/01/18 职场文书
网络宣传方案
2014/03/15 职场文书
室内设计专业自荐信
2014/05/31 职场文书
演讲比赛策划方案
2014/06/11 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
爱情保证书
2015/01/17 职场文书
党员倡议书
2015/01/19 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python