当前位置: 首页 > news >正文

Vue中watch监听属性的一些应用总结

【1】vue2中watch的应用

① 简单监视

在 Vue 2 中,如果你不需要深度监视,即只需监听顶层属性的变化,可以使用简写形式来定义 watch。这种方式更加简洁,适用于大多数基本场景。

示例代码

假设你有一个 Vue 组件,其中包含一个名为 message 的字符串属性,你希望监听这个属性的变化。你可以这样写:

new Vue({el: '#app',data: {message: 'Hello Vue!'},watch: {// 简写形式,直接指定 handler 函数message(newVal, oldVal) {console.log('message changed from', oldVal, 'to', newVal);}}
});

解释

  • message(newVal, oldVal): 这个函数会在 message 属性发生变化时被调用。newVal 参数是新的值,oldVal 参数是旧的值。
  • watch: 在 watch 对象中,键是你想监听的数据属性名,值是一个函数,该函数会在属性值发生变化时被调用。

更复杂的例子

假设你有一个对象,但你只想监听对象的某个特定属性,而不是整个对象的深度变化:

new Vue({el: '#app',data: {user: {name: 'Jack',age: 25}},watch: {// 监听 user.name 属性的变化'user.name'(newVal, oldVal) {console.log('user.name changed from', oldVal, 'to', newVal);}}
});

解释

  • 'user.name'(newVal, oldVal): 这里使用字符串 'user.name' 作为键,Vue 会自动解析这个字符串并监听 user 对象的 name 属性的变化。
  • watch: 同样,在 watch 对象中,键是你想监听的数据属性路径,值是一个函数,该函数会在属性值发生变化时被调用。

总结

简写形式的 watch 非常适合用于监听顶层属性或对象的特定属性的变化。如果你不需要深度监视,这种简写形式可以使代码更加简洁和易读。如果你有更多复杂的需求,比如需要立即执行监听器或处理更深层次的变化,可以使用完整的对象形式。

② 深度监视

在 Vue 2 中,watch 是一个非常有用的工具,它允许开发者监听 Vue 实例上的数据属性的变化,并在这些属性变化时执行特定的操作。当你需要监听的对象是一个复杂的数据结构(如对象或数组),并且你希望监听该对象内部属性的变化时,就需要使用深度监视(deep watching)。

如何使用深度监视?

要启用深度监视,你需要在 watch 配置中添加一个对象而不是简单的函数。这个对象应该包含两个属性:handlerdeep

  • handler:这是一个函数,当被监听的数据发生变化时,这个函数会被调用。它接收两个参数:newValue(新值)和 oldValue(旧值)。
  • deep:这是一个布尔值,默认为 false。将其设置为 true 可以开启深度监视,这意味着 Vue 将会递归地监视对象的所有属性,直到最深层。

示例代码

假设你有一个 Vue 组件,其中包含一个名为 user 的对象,你希望监听 user.nameuser.age 的变化。你可以这样做:

new Vue({el: '#app',data: {user: {name: 'Jack',age: 25}},watch: {// 监听 user 对象的变化user: {handler(newVal, oldVal) {console.log('user changed', newVal, oldVal);},deep: true // 开启深度监听}}
});

注意事项

  • 性能考虑:开启深度监听可能会导致性能下降,特别是当监听的对象非常大或嵌套层次很深时。因此,只有在确实需要监听对象内部属性的变化时才应使用深度监听。
  • 立即执行:如果你想在初始化时也执行一次监听器,可以添加 immediate: true 到监听配置中。

示例代码(带立即执行)

new Vue({el: '#app',data: {user: {name: 'Jack',age: 25}},watch: {user: {handler(newVal, oldVal) {console.log('user changed', newVal, oldVal);},deep: true,immediate: true // 初始化时立即执行一次handler}}
});
http://www.lryc.cn/news/454016.html

相关文章:

  • MongoDB-aggregate流式计算:带条件的关联查询使用案例分析
  • Redis数据库与GO(一):安装,string,hash
  • expressjs,实现上传图片,返回图片链接
  • 爬虫——XPath基本用法
  • 常见排序算法汇总
  • Golang | Leetcode Golang题解之第459题重复的子字符串
  • 0.计网和操作系统
  • 探索Prompt Engineering:开启大型语言模型潜力的钥匙
  • 滚雪球学Oracle[3.3讲]:数据定义语言(DDL)
  • ssrf学习(ctfhub靶场)
  • ElasticSearch之网络配置
  • 【C语言进阶】系统测试与调试
  • 多个单链表的合成
  • 『建议收藏』ChatGPT Canvas功能进阶使用指南!
  • Ollama 运行视觉语言模型LLaVA
  • gdb 调试 linux 应用程序的技巧介绍
  • Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)
  • aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
  • 【Python】Eventlet 异步网络库简介
  • 【JNI】数组的基本使用
  • React跨平台
  • 如何在 SQL 中更新表中的记录?
  • 宠物饮水机的水箱低液位提醒如何实现?
  • EXCEL_光标百分比
  • (一)Web 网站服务之 Apache
  • 英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)
  • AI学习指南深度学习篇-学习率衰减的实现机制
  • My_qsort() -自己写的 qsort 函数
  • 《向量数据库指南》——Mlivus Cloud打造生产级AI应用利器
  • Electron 进程通信