vue中watch的用法

news/2024/10/15 16:01:33/

在 Vue.js 中,watch 是一个用于侦听和响应数据变化的选项。它常用于监听组件数据(包括 propsdata 中的值)的变化,并在值发生变化时执行自定义逻辑。

基本用法

watch 选项接受一个对象,其中键是你想要侦听的变量,值是一个回调函数,在该变量发生变化时执行。

<template><div><p>{{ message }}</p><button @click="updateMessage">Change Message</button></div>
</template><script>
export default {data() {return {message: 'Hello, Vue!'};},methods: {updateMessage() {this.message = 'Hello, Watcher!';}},watch: {// 监听 message 变量的变化message(newValue, oldValue) {console.log('Message changed from', oldValue, 'to', newValue);}}
};
</script>

在这个例子中,watch 侦听 message 的变化,并在 message 发生变化时打印新值和旧值。

立即执行和深度监听

  1. 立即执行 (immediate): 默认情况下,watch 只在数据变化时触发。如果你希望在组件初始化时立即执行一次回调,可以通过 immediate: true 配置。
watch: {message: {handler(newValue, oldValue) {console.log('Message changed:', newValue);},immediate: true}
}
  1. 深度监听 (deep): 如果你监听的是一个对象或数组,且希望监听其内部属性的变化,可以使用 deep: true
watch: {obj: {handler(newValue, oldValue) {console.log('Object changed:', newValue);},deep: true}
}

监听多个数据源

你也可以在一个 watcher 中监听多个数据源,类似于计算属性的 getter。

watch: {'person.name'(newValue) {console.log('Person name changed:', newValue);},'person.age'(newValue) {console.log('Person age changed:', newValue);}
}

侦听计算属性

watch 不仅可以侦听普通数据,还可以侦听计算属性的变化。

computed: {fullName() {return `${this.firstName} ${this.lastName}`;}
},
watch: {fullName(newValue) {console.log('Full name changed to:', newValue);}
}

停止 watch

watch 方法还可以在 createdmounted 生命周期钩子中手动使用,返回的取消函数可以停止监听:

javascript">const unwatch = this.$watch('message', (newValue, oldValue) => {console.log('Message changed:', newValue);
});// 停止监听
unwatch();

总结

watch 用于对数据变化做出反应。适合用于:

  • 侦听复杂的逻辑变化
  • 监听异步请求的结果
  • 处理一些需要精确控制的数据变化响应

它与 computed 的区别在于:computed 是基于依赖进行缓存的属性,而 watch 是对数据变化的副作用处理。


http://www.ppmy.cn/news/1539494.html

相关文章

分式规划(Fractional Programming, FP)和半定松弛(Semidefinite Relaxation, SDR)的适用条件

分式规划&#xff08;Fractional Programming, FP&#xff09;和半定松弛&#xff08;Semidefinite Relaxation, SDR&#xff09;是解决非线性优化问题的常用技术。它们有各自的适用条件&#xff0c;下面我将逐一解释它们的应用条件和适用场景。 1. 分式规划&#xff08;Fract…

《深度学习》OpenCV 人脸检测、微笑检测 原理及案例解析

目录 一、人脸检测 1、如何实现人脸识别 2、haar特征 1&#xff09;什么是哈尔特征 2&#xff09;工作原理 3&#xff09;关于预先定义的哈尔特征矩形框 • 矩形框位置 • 矩形框大小 • 矩形框类型 4&#xff09;举例 3、级联分类器 4、级联分类器的使用 二、人脸…

Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy

目录 Map算子使用 FlatMap算子使用 Filter算子使用-数据过滤 Distinct算子使用-数据去重 groupBy算子使用-数据分组 sortBy算子使用-数据排序 Map算子使用 # map算子主要使用长场景&#xff0c;一个转化rdd中每个元素的数据类型&#xff0c;拼接rdd中的元素数据&#xf…

分治算法(7)_归并排序_计算右侧小于当前元素的个数

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(7)_归并排序_计算右侧小于当前元素的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&…

全面掌握 Linux 服务管理:从入门到精通

全面掌握 Linux 服务管理&#xff1a;从入门到精通 引言 在 Linux 系统中&#xff0c;服务管理是系统管理员和开发者的基本技能之一。无论是启动、停止、重启还是查看服务状态&#xff0c;systemctl 命令都能让你轻松完成这些操作。今天&#xff0c;我们将深入探讨如何使用 sy…

Linux操作系统——外存的管理(实验报告)

实验 Linux系统外存管理 一、实验目的 熟练Linux系统外存管理的方法与命令。 二、实验环境 硬件&#xff1a;PC电脑一台&#xff0c;网络正常。 配置&#xff1a;win10系统&#xff0c;内存大于8G 硬盘500G及以上。 软件&#xff1a;VMware、Ubuntu16.04。 三、实验内容 …

Python和CUDA(C++)量子退火和伊辛二次算法模型

&#x1f3af;要点 简化量子退火或离散优化算法处理&#xff0c;使用张量网络模拟和动态系统方法及神经网络逼近。实现并行退火算法和CUDA支持下穷举搜索法。使用大都会算法模拟二维自旋玻璃伊辛模型并测量磁化率、比热容和能量。对比其他组合优化解方法&#xff0c;使用英伟达…

上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

待更新(持续更新&#xff09;&#xff0c;早关注&#xff0c;不迷路............................................................................... 目标检测系统操作说明【用户使用指南】&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff…