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

vue2 watch 用法

Vue 2 的 watch 选项用于监听组件中数据的变化,并在变化时执行相应的操作。它的用法分为“对象写法”和“数组写法”,还可以配置深度监听、立即执行等选项。下面按常见场景逐一说明。


1. 基本用法(函数写法)

监听单个数据属性,最简单、最常用的形式:

export default {data() {return {msg: 'hello'}},watch: {// 监听 msg 的变化msg(newVal, oldVal) {console.log('msg 变化:', oldVal, '→', newVal)}}
}

2. 对象写法(带选项)

当需要配置 immediatedeep 等高级选项时使用:

export default {data() {return {user: { name: 'Tom', age: 18 }}},watch: {user: {handler(newVal, oldVal) {console.log('user 对象变化:', newVal)},deep: true,      // 深度监听对象内部属性变化immediate: true  // 组件创建后立即执行一次 handler}}
}

3. 监听对象的某个具体属性

监听嵌套对象中的某个字段,用字符串路径:

export default {data() {return {user: { name: 'Tom', age: 18 }}},watch: {// 监听 user.name'user.name'(newVal, oldVal) {console.log('user.name 变化:', newVal)}}
}

4. 数组写法(同时监听多个字段)

当多个字段共享同一个回调时,可以用数组:

export default {data() {return {a: 1,b: 2}},watch: {// a 或 b 任一变化都会触发a: 'someMethod',b: 'someMethod'},methods: {someMethod() {console.log('a 或 b 变化了')}}
}

5. 使用 $watch 在运行时动态监听

有时需要在 createdmounted 钩子里根据条件动态监听:

export default {data() {return { count: 0 }},created() {this.$watch(() => this.count,(newVal, oldVal) => {console.log('count 变化:', newVal)},{ immediate: true })}
}

6. 常见配置项

选项说明
deep是否深度监听对象或数组内部变化(默认 false)。
immediate是否在监听开始后立即执行一次 handler(默认 false)。
flush控制回调触发时机(Vue2 内部使用较少,Vue3 更常用)。

7. 注意事项

  • 性能:开启 deep: true 会递归遍历对象,开销较大,尽量避免监听大对象。
  • 数组/对象替换:直接替换整个数组或对象引用(而非修改内部元素)总能被监听到。
  • 数组索引/长度:直接通过索引修改数组元素 arr[0] = newVal 不会被检测到,应使用 Vue.setthis.$set

8. 完整示例

<template><div><input v-model="user.name" /><p>姓名:{{ user.name }}</p></div>
</template><script>
export default {data() {return {user: { name: 'Tom' }}},watch: {'user.name': {handler(newVal, oldVal) {console.log(`姓名从 ${oldVal} 改为 ${newVal}`)},immediate: true}}
}
</script>

以上覆盖了 Vue 2 中 watch 的绝大多数日常用法,根据场景选择合适的形式即可。

http://www.dtcms.com/a/343183.html

相关文章:

  • K8s安全管理与持久化存储实战指南
  • Seaborn数据可视化实战:Seaborn入门-环境搭建与基础操作
  • Seaborn数据可视化实战
  • AI对口型唱演:科技赋能,开启虚拟歌者新篇章
  • 刷机维修进阶教程-----如何清除云账号 修复wifi 指南针 相机 指纹等刷机故障
  • 自然处理语言NLP:One-Hot编码、TF-IDF、词向量、NLP特征输入、EmbeddingLayer实现、word2vec
  • Linux 802.11协议栈深度分析与实践指南
  • 车机两分屏运行Unity制作的效果
  • OpenAI重新开源!gpt-oss-20b适配昇腾并上线魔乐社区
  • WebSocket连接的例子
  • 链游开发新篇章:融合区块链技术的游戏创新与探索
  • 什么是撮合引擎
  • 模型的量化-nf4和pf4
  • 基于STM32F103单片机智能门禁热释人体感应报警设计
  • C#串口单例 + 端口复用
  • LCD DMA day59
  • 为何vivo做了头显,小米却选择AI眼镜
  • 【GNSS基带算法】Chapter.2 相干积分与非相干积分
  • 基于 .NET Core Web API 请求 Nacos 配置中心的最佳实践
  • 微服务01-微服务架构:Java中的最佳实践
  • 业务扩展字段系统设计理念与流程图
  • LeetCode_动态规划
  • 【NLP(01)】NLP(自然语言处理)基础
  • nginx-自制证书实现
  • Python学习 -- MySQL数据库的查询及案例
  • 自然语言处理——03 RNN及其变体
  • C++ 命名规范示意表
  • iOS 应用上架瓶颈与解决方案 从开发到审核的全流程实战
  • 机器学习中的聚类与集成算法:从基础到应用
  • word参考文献对齐