vue.js中watch的六种用法(附实例解析)
文章目录
- 监听器 watch
- Watch 用法1:常见用法
- Watch 用法2:绑定方法
- Watch 用法3:deep + handler
- Watch 用法4:immediate
- initWatch
- createWatch
- Watch 用法5:绑定多个 handler
- Watch 用法6:监听对象属性
监听器 watch
官方文档:https://cn.vuejs.org/v2/api/#watch
官方文档:https://cn.vuejs.org/v2/api/#vm-watch
实例:监听器 watch
Watch 用法1:常见用法
<body><div id="root"><h3>Watch 用法1:常见用法</h3><input v-model="message"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root',watch: {message(value) {this.copyMessage = value}},data() {return {message: 'Hello Vue',copyMessage: ''}}})</script>
</body>
键值一体,键为message
,值为message()
方法
message(value) {this.copyMessage = value
}
监听器的一些默认值:
Watch 用法2:绑定方法
<body><div id="root2"><h3>Watch 用法2:绑定方法</h3><input v-model="message"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root2',watch: {message: 'handleMessage'},data() {return {message: 'Hello Vue',copyMessage: ''}},methods: {handleMessage(value) {this.copyMessage = value}}})</script>
</body>
键为message
,值为’handleMessage()
方法,每次监听到message
变化,'handleMessage()
方法就会执行一次
PS:双向绑定的值(
v-model="message"
和data() {return {message}}
)和watch
监听的键要保持一致,同为message
Watch 用法3:deep + handler
<body><div id="root3"><h3>Watch 用法3:deep + handler</h3><input v-model="deepMessage.a.b"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root3',watch: {deepMessage: {handler: 'handleDeepMessage',deep: true}},data() {return {deepMessage: {a: {b: 'Deep Message'}},copyMessage: ''}},methods: {handleDeepMessage(value) {this.copyMessage = value.a.b}}})</script>
</body>
默认情况下 watch方法只监听data中的对象,而无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听。(默认:deep:false)
这个案例可以看出:双向绑定的值(v-model="deepMessage.a.b"
和deepMessage:{a: {b:'Deep Message'}},
)保持一致;watch
不能直接监听deepMessage.a.b
,而是需要通过handler
和deep
属性来完成监听
Watch 用法4:immediate
<body><div id="root"><div id="root4"><h3>Watch 用法4:immediate</h3><input v-model="message"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root4',watch: {message: {handler: 'handleMessage',immediate: true,}},data() {return {message: 'Hello Vue',copyMessage: ''}},methods: {handleMessage(value) {this.copyMessage = value}}})</script>
</body>
watch
默认情况下在页面首次渲染时,即使监听的值有初始值,也不会直接执行,这种情况下想要第一次渲染后直接监听就需要添加属性:immediate: true
initWatch
createWatch
Watch 用法5:绑定多个 handler
<body><div id="root5"><h3>Watch 用法5:绑定多个 handler</h3><input v-model="message"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root5',watch: {message: [{handler: 'handleMessage',},'handleMessage2',function(value) {this.copyMessage = this.copyMessage + '...'}]},data() {return {message: 'Hello Vue',copyMessage: ''}},methods: {handleMessage(value) {this.copyMessage = value},handleMessage2(value) {this.copyMessage = this.copyMessage + '*'}}})</script>
</body>
监听值为多个,需要用数组形式:
- 值为对象:执行对象的handler属性值对应方法handleMessage
- 值为字符串:执行字符串对应方法handleMessage2
- 值为方法:直接执行方法
先监听的先执行,各自独立,每个都是独立的监听器
本示例中value
都是一致的,只有handleMessage
获取了这个value
,其他监听器处理的都是上一步处理过的copyMessage
若多个监听器监听同一个对象,那么只会渲染最后一次处理结果
Watch 用法6:监听对象属性
<body><div id="root6"><h3>Watch 用法6:监听对象属性</h3><input v-model="deepMessage.a.b"><span>{{copyMessage}}</span></div><script>new Vue({el: '#root6',watch: {'deepMessage.a.b': 'handleMessage'},data() {return {deepMessage: { a: { b: 'Hello Vue' } },copyMessage: ''}},methods: {handleMessage(value) {this.copyMessage = value}}})</script>
</body>
只监听对象的某少数个属性值时,可以用对象.属性
字符串形式进行监听
源码解析参见:Vue.js 源码分析(七) 基础篇 侦听器 watch属性详解
vue.js中watch的六种用法(附实例解析)相关推荐
- Vue.js 中的渲染函数是什么?如何使用渲染函数?
Vue.js 中的渲染函数是什么?如何使用渲染函数? Vue.js 是一款流行的前端框架,它提供了许多方便的工具和 API,用于构建交互式的用户界面.其中,渲染函数是 Vue.js 中一个强大的工具, ...
- Vue.js 3.0快速入门(附电影购票APP开发实战源码)
前言 文档笔记来源:kuangshenstudy,清华大学出版社,结合视频资源食用更佳,相关资源源码在文末,有需要自取. 一.概述 Vue是什么? Vue.js是基于JavaScript的一套MVVC ...
- echarts怎么用在php,在Vue.JS中怎样使用echarts
这次给大家带来在Vue.JS中怎样使用echarts,在Vue.JS中使用echarts的注意事项有哪些,下面就是实战案例,一起来看一下. 上篇文章给大家介绍了 在 webpack 中使用 EChar ...
- html dom createevent,js 中 document.createEvent的用法
js 中 document.createEvent的用法 更新时间:2010年08月29日 23:22:02 作者: 用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象. ...
- js 中 document.createEvent的用法-转载
js 中 document.createEvent的用法 <a class="comment-mod" οnclick="alert('ss')" hre ...
- Vue.js中的MVVM
MVVM的理解 MVVM拆开来即为Model-View-ViewModel,有View,ViewModel,Model三部分组成.View层代表的是视图.模版,负责将数据模型转化为UI展现出来.Mod ...
- vue.js中mock本地json数据
vue.js中mock本地json数据 新版本的vue项目中已经将dev-server.js,dev-client.js两个js文件合并到了webpack.dev.conf.js文件中,以下分别是新旧 ...
- VUE.js 中取得后台原生HTML字符串 原样显示问题
今天使用vue调试页面,发现了页面上的一个问题,后台数据传过来的HTML字符串并没有被转换为正常的HTML代码,一拍脑门,发现忘记转换了,于是满心欢喜加上了{{{}}}.但是之后构建发现报错: 为此去 ...
- php动态写入vue,Vue.js中使用动态组件的方法
本文介绍了如何在Vue.js中引用组件中的HTML元素.您可以通过使用Vue路由器或创建动态组件来切换视图或组件模板. Vue路由器用于在DOM中的视图或组件模板之间导航.要使用Vue路由器,请在ro ...
最新文章
- 2022-2028年中国EMI膜产业发展态势及市场发展策略报告
- 计算TD-LTE DL 峰值速率的工具和相关参数
- rootkit 检测报告
- 骑马与砍杀python代码_GitHub - yunwei1237/scottish-fold: 一个关于骑马与砍杀的剧本制作工具...
- 三次握手的第三个ACK包丢了,会发生什么?
- 实际工作中,一个完整的可视化大屏项目有哪些步骤?
- 原版英文书籍《Linux命令行》阅读记录3 | 解析文件的描述含义和阅读文件
- gradle 失败 编译项目_maven常见问题处理(3-3)Gradle编译时下载依赖失败解决方法...
- docker版mysql的使用和配置(2)——docker版mysql的dockerfile
- kibana报错Request Timeout after 30000ms故障解决
- java使用itext开源包实现pdf文件合并,亲测可用,响应速度快的惊人
- 【优化分类】基于matlab遗传算法结合爬山算法优化极限学习机分类【含Matlab源码 1660期】
- wps居中对齐不在中间_wps有时候居中对齐不是在中间
- 树莓派打造智能语音控制系统
- dzzoffice 任意文件下载漏洞分析
- 【学习笔记 31】 buu [0CTF 2016]piapiapia
- pure specifier can only be specified for functions
- Bootstrap模板-Minimal.2.1.1
- 关于ImportError: DLL load failed: 找不到指定的模块
- 磁饱和的产生原因和影响;磁化强度H和磁感应强度B
热门文章
- 使用ECharts实现各种数据统计图(饼图,柱状图,折线图)在javaWeb中的应用
- 华为atn950b指导手册_华为ATN950B BFD for 静态PW的配置问题
- 一键调整Word中所有图片的大小
- 统计网站用户在线人数
- Java整合ImageMagick图片裁剪工具,奉上实现图片处理的常用方法,如:自由裁剪、中心化裁剪、缩略图、中心化缩略图等。 工具方法类
- Qt-Json数据处理-转字符串-字符串转Json对象-中文处理
- 互联网安全架构平台设计
- Knn算法与 Svm算法对比
- ios14降级服务器修复了吗,iOS14降级失败无法退出恢复模式怎么办?
- 使用impdp导入dmp文件