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

news2024/10/6 15:18:38

【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.coloradmin.cn/o/2192207.html

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

相关文章

爬虫案例——爬取情话网数据

需求: 1.爬取情话网站中表白里面的所有句子(表白词_表白的话_表白句子情话大全_情话网) 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…

【实战篇】自增主键为什么不是连续的?

背景 由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。 之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的。但实际上,这样的假设是错的&#…

Linux高阶——Github本地仓库与云端仓库关联

1、安装代理软件 steam 选择Github和系统代理模式,一键加速即可 2、 安装Git 3、访问Github网站,创建新用户 4、Github探索 (1)Explore探索标签 (2)工程结构 用户名/仓库名 自述文件,用markdo…

C语言复习概要(三)

本文 使用Visual Studio进行调试的技巧与函数递归详解1. 引言2. Visual Studio 调试技巧2.1. 断点的使用2.1.1. 基本断点示例:设置基本断点 2.1.2. 条件断点示例:条件断点 2.2. 逐步执行代码示例:逐步执行代码 2.3. 监视变量使用监视窗口 2.4…

希捷8T硬盘exfat变0字节的恢复方法

最近流行的3.5寸大容量台式硬盘移动盒子是一种性价比较高的组合,为了方便如涉及到跨平台(win和mac),大多数此类组合选择了exfat文件系统。下边这个案例就是我们经常遇到的exfat变0字节。 故障存储: ST8000HKVS002 8T/exfat 文件…

STM32F407 HAL库单通道ADC采集并串口打印电压值

本文将介绍如何使用STM32F407的HAL库实现单通道ADC采集,并通过串口将采集到的电压值打印出来。具体地,我们将使用ADC1读取通道5(对应引脚PA5),并将转换后的电压值用串口1发送到串口助手上进行显示。 一、开发环境 硬件…

类和对象的学习1

类和对象的学习1 [TOC](类和对象的学习1一、类的定义1.类定义格式2.访问限定符 二、实例对象1.实例3.对象大小4. this指针5.⾯向对象三⼤特性“封装、继承、多态”中的封装) 一、类的定义 1.类定义格式 1.1 class为定义类的关键字,Stack为类的名字,{}中…

第十五周周报

目录 摘要Abstract1 LSTM模型实战1.1 数据处理1.2 LSTM模型的搭建1.3 数据的预测和可视化 2 transformer(上)2.1 Transformer 结构2.2 Transformer 编码器 总结 摘要 本周的工作内容主要分为两个部分,第一部分是使用LSTM模型预测股票市场数据…

Python(八)-异常

目录 什么是异常 快速入门异常 常见的异常类型 常见处理方式 捕获一个指定异常 捕获多个异常 捕获所有的异常 异常的其他关键字 异常具有传递性 什么是异常 异常指的是Python程序发生的不正常事件。 有时候,异常可称为错误。 当检测到一个错误时&#x…

CPU飙高如何处理?

测试人员在压测的时候,会对应用进行测试,这个时候会查看cpu、内存、load、rt、qps等指标 CPU利用率是来描述CPU的使用情况的,表明了一段时间内CPU被占用的情况。使用率越高,说明机器在这个时间上运行了很多程序。 如何进行问题定…

codetop标签树刷题(四)!!暴打面试官!!!!

用于个人复习 1.二叉树的右视图2.二叉树最大宽度3.二叉树的最大深度4.N叉树的最大深度5.二叉树的最小深度6.子树的最大平均值7.求根节点到叶节点的数字之和8.另一棵树的子树9.对称二叉树 1.二叉树的右视图 给定一个二叉树的根节点root,想象自己站在它的右侧&#x…

麒麟操作系统如何识别提取图片中的文字

在工作、学习中,我们经常会需要从图片中提取文字,在手机上或其它操作系统上,有各种方法。本书中,我们介绍麒麟操作系统提取图片中文字的方法。 首先准备好自己需要的文档截图,把不需要的部分裁掉,以免影响…

电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!

电容笔还是很值得买的,不管是对于日常书写,简单笔记,还是绘画等场景而言,选择一款性价比高的平替电容笔都能提升生产力。可是现在市面上的品牌很多,该如何挑选最适合自己的电容笔呢?不用着急,我…

【AIGC半月报】AIGC大模型启元:2024.10(上)

【AIGC半月报】AIGC大模型启元:2024.10(上) (1) YOLO11(Ultralytics新作) (1) YOLO11(Ultralytics新作) 2024.10.01 Ultralytics在 YOLO Vision 2024 活动上宣布发布其新的计算机视觉模型 YOLO…

千元级体验--希亦ACE迷你洗衣机测评分享,宝妈必备的性价比好物

​小孩子的衣物是不建议和大人衣物一起洗的,一方面是他们的免疫力比较低下,如果和大人混杂各种污渍病菌一起洗的话,容易有感染细菌的可能。而另一方面,小孩子特别是女婴的衣物,更要仔细注意,因为大人的衣物…

ad.concat()学习

学习1 import anndata as ad, pandas as pd, numpy as np from scipy import sparse a ad.AnnData(Xsparse.csr_matrix(np.array([[0, 1], [2, 3]])),obspd.DataFrame({"group": ["a", "b"]}, index["s1", "s2"]),varpd.D…

(作业)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

基础任务 (完成此任务即完成闯关) 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用Lang…

[C++]使用纯opencv部署yolov11旋转框目标检测

【官方框架地址】 GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 【算法介绍】 YOLOv11是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv11的一项重要特性&#xff0c;它可以有效地检…

vulnhub-digitalworld.local DEVELOPMENT靶机

vulnhub&#xff1a;digitalworld.local: DEVELOPMENT ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 开了几个端口&#xff0c;8080端口有网页&#xff0c;访问 说是让访问html_pages 似乎把页面都写出来了&…

FPGA时序分析和约束学习笔记(2、FPGA时序传输模型)

Tclk1TcoTdata < Tclk Tclk2 -Tsu Slack Tskew Tclk - Tsu - Tdata - Tco Skew时钟偏斜&#xff1a;时钟从源端口出发&#xff0c;到达目的寄存器和源寄存器的时间差值&#xff08;Tclk2-Tclk1&#xff09; Tsu建立时间&#xff1a;目的寄存器自身的特性决定&#xff…