文章目录

  • 监听器 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,而是需要通过handlerdeep属性来完成监听


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的六种用法(附实例解析)相关推荐

  1. Vue.js 中的渲染函数是什么?如何使用渲染函数?

    Vue.js 中的渲染函数是什么?如何使用渲染函数? Vue.js 是一款流行的前端框架,它提供了许多方便的工具和 API,用于构建交互式的用户界面.其中,渲染函数是 Vue.js 中一个强大的工具, ...

  2. Vue.js 3.0快速入门(附电影购票APP开发实战源码)

    前言 文档笔记来源:kuangshenstudy,清华大学出版社,结合视频资源食用更佳,相关资源源码在文末,有需要自取. 一.概述 Vue是什么? Vue.js是基于JavaScript的一套MVVC ...

  3. echarts怎么用在php,在Vue.JS中怎样使用echarts

    这次给大家带来在Vue.JS中怎样使用echarts,在Vue.JS中使用echarts的注意事项有哪些,下面就是实战案例,一起来看一下. 上篇文章给大家介绍了 在 webpack 中使用 EChar ...

  4. html dom createevent,js 中 document.createEvent的用法

    js 中 document.createEvent的用法 更新时间:2010年08月29日 23:22:02   作者: 用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象. ...

  5. js 中 document.createEvent的用法-转载

    js 中 document.createEvent的用法 <a class="comment-mod" οnclick="alert('ss')" hre ...

  6. Vue.js中的MVVM

    MVVM的理解 MVVM拆开来即为Model-View-ViewModel,有View,ViewModel,Model三部分组成.View层代表的是视图.模版,负责将数据模型转化为UI展现出来.Mod ...

  7. vue.js中mock本地json数据

    vue.js中mock本地json数据 新版本的vue项目中已经将dev-server.js,dev-client.js两个js文件合并到了webpack.dev.conf.js文件中,以下分别是新旧 ...

  8. VUE.js 中取得后台原生HTML字符串 原样显示问题

    今天使用vue调试页面,发现了页面上的一个问题,后台数据传过来的HTML字符串并没有被转换为正常的HTML代码,一拍脑门,发现忘记转换了,于是满心欢喜加上了{{{}}}.但是之后构建发现报错: 为此去 ...

  9. php动态写入vue,Vue.js中使用动态组件的方法

    本文介绍了如何在Vue.js中引用组件中的HTML元素.您可以通过使用Vue路由器或创建动态组件来切换视图或组件模板. Vue路由器用于在DOM中的视图或组件模板之间导航.要使用Vue路由器,请在ro ...

最新文章

  1. 2022-2028年中国EMI膜产业发展态势及市场发展策略报告
  2. 计算TD-LTE DL 峰值速率的工具和相关参数
  3. rootkit 检测报告
  4. 骑马与砍杀python代码_GitHub - yunwei1237/scottish-fold: 一个关于骑马与砍杀的剧本制作工具...
  5. 三次握手的第三个ACK包丢了,会发生什么?
  6. 实际工作中,一个完整的可视化大屏项目有哪些步骤?
  7. 原版英文书籍《Linux命令行》阅读记录3 | 解析文件的描述含义和阅读文件
  8. gradle 失败 编译项目_maven常见问题处理(3-3)Gradle编译时下载依赖失败解决方法...
  9. docker版mysql的使用和配置(2)——docker版mysql的dockerfile
  10. kibana报错Request Timeout after 30000ms故障解决
  11. java使用itext开源包实现pdf文件合并,亲测可用,响应速度快的惊人
  12. 【优化分类】基于matlab遗传算法结合爬山算法优化极限学习机分类【含Matlab源码 1660期】
  13. wps居中对齐不在中间_wps有时候居中对齐不是在中间
  14. 树莓派打造智能语音控制系统
  15. dzzoffice 任意文件下载漏洞分析
  16. 【学习笔记 31】 buu [0CTF 2016]piapiapia
  17. pure specifier can only be specified for functions
  18. Bootstrap模板-Minimal.2.1.1
  19. 关于ImportError: DLL load failed: 找不到指定的模块
  20. 磁饱和的产生原因和影响;磁化强度H和磁感应强度B

热门文章

  1. 使用ECharts实现各种数据统计图(饼图,柱状图,折线图)在javaWeb中的应用
  2. 华为atn950b指导手册_华为ATN950B BFD for 静态PW的配置问题
  3. 一键调整Word中所有图片的大小
  4. 统计网站用户在线人数
  5. Java整合ImageMagick图片裁剪工具,奉上实现图片处理的常用方法,如:自由裁剪、中心化裁剪、缩略图、中心化缩略图等。 工具方法类
  6. Qt-Json数据处理-转字符串-字符串转Json对象-中文处理
  7. 互联网安全架构平台设计
  8. Knn算法与 Svm算法对比
  9. ios14降级服务器修复了吗,iOS14降级失败无法退出恢复模式怎么办?
  10. 使用impdp导入dmp文件