Vue.js 中的 watch 属性详解

news2025/2/25 19:05:58

Vue.js 中的 watch 属性详解

在 Vue.js 中,watch 属性是一种非常重要的属性,它可以监听 Vue 实例中指定的数据变化,并在数据发生变化时执行相应的操作。本文将对 Vue.js 中的 watch 属性进行详细的介绍,并附上相关的代码示例。

在这里插入图片描述

什么是 watch 属性?

在 Vue.js 中,watch 属性被定义为一个对象,它可以用来监听 Vue 实例中的数据变化。当监听的数据发生变化时,watch 属性可以执行指定的回调函数,从而实现对数据变化的响应。

watch 属性的基本语法如下所示:

// 监听一个数据的变化
watch: {
  targetData: {
    handler(newVal, oldVal) {
      // 数据发生变化时执行的操作
    },
    deep: true, // 是否深度监听
    immediate: true, // 是否在组件创建时立即执行回调函数
  },
},

在上述代码中,targetData 表示要监听的数据,handler 表示数据发生变化时执行的回调函数。deepimmediate 分别表示是否深度监听和是否在组件创建时立即执行回调函数。

watch 属性的用途

watch 属性的主要用途是监听 Vue 实例中的数据变化,并在数据发生变化时执行相应的操作。例如,在一个购物车组件中,我们可以使用 watch 属性监听购物车中的商品数量变化,并在商品数量变化时重新计算购物车总价。

此外,watch 属性还可以用来监听组件中的数据变化,并进行一些数据验证和数据同步操作。例如,在一个表单组件中,我们可以使用 watch 属性监听用户输入的数据,并在数据发生变化时进行数据验证和数据同步操作,从而增强表单的交互性和可用性。

watch 属性的深度监听

在 Vue.js 中,watch 属性可以进行深度监听,这意味着当监听的数据是一个对象或数组时,它会递归地监听对象或数组中的每一个属性和元素的变化。

例如,在下面的代码中,我们使用 watch 属性对一个对象进行深度监听:

watch: {
  obj: {
    handler(newVal, oldVal) {
      console.log('obj changed:', newVal, oldVal);
    },
    deep: true,
  },
},

在上述代码中,当对象 obj 中的任意一个属性发生变化时,都会触发回调函数,从而输出相应的日志信息。

需要注意的是,在进行深度监听时,由于监听的数据结构比较复杂,可能会导致性能问题,因此建议在进行深度监听时,尽量避免监听过深的层次。

watch 属性的立即执行

在 Vue.js 中,watch 属性可以设置立即执行(immediate: true),这意味着在组件创建时立即执行回调函数,而不需要等待数据发生变化。

例如,在下面的代码中,我们使用 watch 属性监听一个数据,并在组件创建时立即执行回调函数:

watch: {
  data: {
    handler(newVal, oldVal) {
      console.log('data changed:', newVal, oldVal);
    },
    immediate: true,
  },
},

在上述代码中,当组件创建时,就会立即执行回调函数,并输出相应的日志信息。

需要注意的是,在进行立即执行时,由于回调函数会在组件创建时被执行,因此需要确保监听的数据已经被初始化,否则可能会导致回调函数的执行出错。

watch 属性的销毁

在 Vue.js 中,watch 属性会在组件销毁时自动销毁,这意味着当组件被销毁时,watch 属性也会被自动销毁。这种自动销毁的机制可以有效地避免内存泄漏问题。

例如,在下面的代码中,我们使用 watch 属性监听一个数据,并在组件销毁时自动销毁:

export default {
  data() {
    return {
      data: '',
    };
  },
  watch: {
    data: {
      handler(newVal, oldVal) {
        console.log('data changed:', newVal, oldVal);
      },
    },
  },
  beforeDestroy() {
    // 组件销毁前自动销毁 watch 属性
    this.$watch();
  },
};

在上述代码中,我们通过 beforeDestroy 钩子函数,在组件销毁前手动销毁 watch 属性,以避免内存泄漏问题。

watch 属性的使用示例

下面通过一个实际的示例来演示如何使用 watch 属性。

监听数据变化

在下面的代码中,我们使用 watch 属性监听一个数据的变化,并在数据发生变化时输出相应的日志信息:

<template>
  <div>
    <input v-model="text" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '',
    };
  },
  watch: {
    text: {
      handler(newVal, oldVal) {
        console.log('text changed:', newVal, oldVal);
      },
    },
  },
};
</script>

在上述代码中,我们使用 watch 属性监听输入框中的文本变化,并在文本发生变化时输出相应的日志信息。

深度监听数据变化

在下面的代码中,我们使用 watch 属性深度监听一个对象的变化,并在数据发生变化时输出相应的日志信息:

<template>
  <div>
    <input v-model="user.name" />
    <input v-model="user.age" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      user: {
        name: '',
        age: '',
      },
    };
  },
  watch: {
    user: {
      handler(newVal, oldVal) {
        console.log('user changed:', newVal, oldVal);
      },
      deep: true,
    },
  },
};
</script>

在上述代码中,我们使用 watch 属性深度监听一个对象 user 的变化,并在对象中的任意一个属性发生变化时输出相应的日志信息。

立即执行回调函数

在下面的代码中,我们使用 watch 属性设置立即执行,并在组件创建时输出相应的日志信息:

<template>
  <div>
    <input v-model="text" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '',
    };
  },
  watch: {
    text: {
      handler(newVal, oldVal) {
        console.log('text changed:', newVal, oldVal);
      },
      immediate: true,
    },
  },
};
</script>

在上述代码中,我们使用 watch 属性设置立即执行,并在组件创建时输出文本的初始值。

总结

本文对 Vue.js 中的 watch 属性进行了详细的介绍,包括 watch 属性的基本语法、用途、深度监听、立即执行和销毁等相关内容。通过本文的学习,相信读者已经对 watch 属性有了更加深入的理解,可以在实际的开发中更加灵活地运用 watch 属性来实现数据的监听和响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/618813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文看穿 TypeScript 的庐山真面目

导语&#xff1a; 在了解 TypeScript 之前&#xff0c;我们需要了解 什么是强类型语言和什么是弱类型语言&#xff0c;以及什么是静态类型&#xff0c;什么又是动态类型。 强类型不允许任意的隐式类型转换&#xff0c;而 弱类型 允许静态类型&#xff1a;一个变量声明时它的类型…

基于Python的大数据舆情分析,舆论情感分析可视化系统

运行效果图 基于Python的微博大数据舆情分析&#xff0c;舆论情感分析可视化系统 系统介绍 微博舆情分析系统&#xff0c;项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 先后进行了数据获取和筛选存储&#xff0c;对存储后的数据库数据进行提取分析处…

sqlmap -os-shell 使用方法

一、burp suite抓包。 如上图所示&#xff0c;红框处很明显是一个传参点&#xff0c;我们就在这个页面抓包。 抓到包之后将内容保存到桌面的1000.txt文件下。 二、sqlmap跑包。 打开sqlmap跑包。 python sqlmap.py -r C:\Users\16434\Desktop\1000.txt -dbmsmysql --os-shell…

Oracle-catalog影响归档量统计

有个12.2 rac环境报警备份异常&#xff0c;登录检查备份&#xff0c;发现报错日志 piece handle/backup/orcl/archbackup/ARCHBAK_ORCL_20230607_738_1 tagARCH_BAK commentNONE channel d1: backup set complete, elapsed time: 00:01:55 released channel: d1 RMAN-00571: …

从Vuex过渡到pinia

Vuex过渡到Pinia 众所周知&#xff0c;Vuex是一个状态管理库&#xff0c;它方便了我们任何组件不用考虑关系就可以共享一个全局的状态。&#x1f603;但是 Vuex也有它一定的缺陷。主要缺点&#xff0c;我总结如下&#xff1a; mutations里面不能写异步函数&#xff0c;否则就…

Simulink仿真模块 - Waveform Generator

Waveform Generator模块的功能是使用信号符号输出波形。它所在的库为: Simulink / Sources 如图所示: 双击模型弹出如下对话框,如图所示: Waveform Generator 模块根据您在波形定义表中输入的信号符号输出波形。 此模块支持下列用于信号符号的语法: 函数…

STM32单片机OLED语音识别路灯台灯控制系统人检测亮度调节

实践制作DIY- GC0143-OLED语音识别路灯台灯控制系统 基于STM32单片机设计---OLED语音识别路灯台灯控制系统 二、功能介绍&#xff1a; 电路&#xff1a;STM32F103C系列最小系统串口语音识别模块LED灯板1个红外传感器OLED显示器1个手动自动模式键1个开关按键 1.有两个模式1个手…

速卖通,国际站,temu测评,补单策略:安全与效能并重,提高账号存活率

测评能够帮助卖家让亚马逊平台更喜欢自己的产品&#xff0c;给予更好排名的同时也让后续进入店铺的买家更容易认可自己的产品。这些真实评价在亚马逊卖家管理系统中被称为Review Feedback。这是进行真实交易后形成的评价&#xff0c;而不是通过机器软件生成&#xff0c;形成虚拟…

SpringData进阶篇-下

SpringData进阶篇 一&#xff1a;故事背景二&#xff1a;自定义操作2.1 JPQL和SQL2.1.1 接口内定义2.1.2 调用2.2.3 SQL 方式查询 2.2 规定方法名2.2.1 普通查询规则2.2.2 修饰查询 2.3 Query By Example2.3.1 Repository继承QueryByExampleExecutor2.3.2 具体使用2.3.2 Exampl…

Aspose.Words功能演示:使用 C# 从 Word 文档中读取宏

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

java-不借用三方程序情况下,使用java自动工具将可执行jar转成exe

一、先新建一个javafx项目 二、配置Artifacts 点击Artifacts,会看到新建的项目会自动创建好了 如果没有的话,可以手动创建如下操作 三、配置 按下图逐一配置即可 四、builde 5、使用java的打包命令打包 PS C:\Users\xx\Downloads\cc\exeex\out\artifacts\JavaFXApp>…

web前端 --- js事件

js事件&#xff08;event&#xff09; &#xff08;js诞生就是基于事件驱动型编程&#xff09; &#xff08;1&#xff09;事件 用户通过各种行为&#xff08;按键、鼠标点击、鼠标hover......&#xff09;行为动作&#xff0c;引起相关 js 代码的执行。 事件的三元素&#x…

多篇论文入选ICASSP 2023 火山语音有效解决多类实践问题

近日由IEEE主办、被誉为世界范围内最大规模、也是最全面的信号处理及其应用方面的顶级学术会议ICASSP2023于希腊召开&#xff0c;该会议具有权威、广泛的学界以及工业界影响力&#xff0c;备受AI领域多方关注。会上火山语音多篇论文被接收并发表&#xff0c;内容涵盖众多前沿领…

springboot+vue+java企业车间工位管理系统

。本文介绍了企业级工位管理系统的开发全过程。通过分析企业级工位管理系统管理的不足&#xff0c;创建了一个计算机管理企业级工位管理系统的方案。文章介绍了企业级工位管理系统的系统分析部分&#xff0c;包括可行性分析等&#xff0c;系统设计部分主要介绍了系统功能设计和…

Vue.js 中的过滤器和计算属性

Vue.js 中的过滤器和计算属性 Vue.js 是一款流行的 JavaScript 框架&#xff0c;它提供了一种简单而灵活的方式来构建交互式 Web 应用程序。在 Vue.js 中&#xff0c;过滤器和计算属性是两个常用的概念。它们可以帮助开发者更方便地处理数据&#xff0c;提高代码的可读性和可维…

【学习日记】操作系统-入门知识-个人学习记录

我的学习笔记链接&#xff1a; MyLinuxProgramming 参考资料 CSAPP操作系统导论OSTEP √APUEhttps://stevens.netmeister.org/631软件调试王道-操作系统操作系统真象还原小林coding-图解系统https://xiaolincoding.com嵌入式软件开发笔试面试指南Linux是怎样工作的2020 南京大…

怎么才能成为一名合法的无线电爱好者?

要想成为一名合法的无线电爱好者&#xff0c;就必须要拥有属于自己的呼号及操作证书。那么具体怎么才能获得这些呢&#xff1f;下面河南宝蓝小编就为大家详细介绍下。 车载电台 一、无线电的呼号是什么&#xff1f; 呼号&#xff0c;是从事无线电操作人员或电台&#xff0c;在…

第12章 并 发

多进程与多线程本质的区别&#xff1a;每个进程都拥有自己的一整套变量&#xff0c;而线程则共享数据。 12.1 什么是线程 将执行这个任务的代码放在一个类的run方法中&#xff0c;这个类要实现Runnable接口。 Runnable接口非常简单&#xff0c;只有一个run方法&#xff1a; …

情感分析实战(中文)-数据获取

情感分析实战(中文)-数据获取 背景&#xff1a;该专栏的目的是将自己做了N个情感分析的毕业设计的一个总结版&#xff0c;不仅自己可以在这次总结中&#xff0c;把自己过往的一些经验进行归纳&#xff0c;梳理&#xff0c;巩固自己的知识从而进一步提升&#xff0c;而帮助各大…

Ubuntu20、centos7安装部署Gitlab

目录 一、简介 二、安装GitLab 1、安装准备工作 2、安装Gitlab a、安装并配置必要的依赖 b、下载Gitlab c、启动postfix邮件服务&#xff0c;设置开机自启 d、安装Gitlab e、修改gitlab配置文件&#xff08;ip和端口&#xff09; g、更新配置文件并重启 h、通过ip地址加端口进行…