vue中watch的用法

embedded/2024/10/15 3:59:51/

在 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/embedded/127683.html

相关文章

地图箭头方向检测系统源码分享

地图箭头方向检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Docker exec bash -c 使用详解与 Python 封装示例

简介&#xff1a;docker exec 是 Docker 的一个实用命令&#xff0c;允许在正在运行的容器中执行命令。通过 bash -c 选项&#xff0c;可以执行复杂的命令串。 历史攻略&#xff1a; go&#xff1a;远程执行系统命令 Python&#xff1a;subprocess模块 Python-subprocess激…

【docker】mysql8.0 的 docker 安装

安装 指定mysql 的安装版本8.0.18 拉取镜像 docker pull mysql:8.0。18创建目录 mkdir -p /opt/docker_volumn/mysql/conf mkdir -p /opt/docker_volumn/mysql/log mkdir -p /opt/docker_volumn/mysql/data mkdir -p /opt/docker_volumn/mysql/mysql-files此步骤是为了将容…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

【数论】有关模运算的巧妙

目录 萌萌的好数题目描述输入描述:输出描述:示例1输入输出说明 解方法一方法二方法三 萌萌的好数 链接&#xff1a;https://ac.nowcoder.com/acm/contest/84851/D 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 26214…

等保测评的持续改进机制:构建动态安全防御体系

等保测评的持续改进机制&#xff1a;构建动态安全防御体系 在当今数字化转型的浪潮中&#xff0c;企业面临着日益复杂和多样的网络安全威胁。等保测评&#xff08;信息安全等级保护测评&#xff09;作为确保信息系统安全性的重要手段&#xff0c;其持续改进机制对于构建动态安…

电子电气架构 --- 智能网联汽车未来是什么样子?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

日期类的实现和取地址运算符重载

前面将类学的差不多&#xff0c;接下来我们就来实现一下日期类。这个日期类包含运算符重载和前面学 的C的语法知识。 首先我们先建立一个日期类的头文件和源文件&#xff1a; 一.日期类的头文件实现&#xff1a; 首先我们要知道我们有闰年&#xff0c;还有每个月的天数也不一样…