watch监听的使用

watch是什么?

在 Vue 3 中,watch 函数被重新设计为一个独立的 API,用于观察数据变化并执行相应的操作。

watch 函数接受两个参数:

  • 第一个参数可以是一个函数或数组。如果是函数,则返回要监听的数据,当数据变化时会触发回调函数;如果是数组,则返回一个数组,包含要监听的多个数据,当任意一个数据变化时都会触发回调函数。
  • 第二个参数是一个回调函数,用于处理数据变化时的操作。回调函数接收两个参数,第一个参数为新值,第二个参数为旧值。
  • 有两个额外的参数:1.immediate(画面加载后立即执行),2.deep(深度侦听)
案例1-监听单个数据:
<template><h1>数量变化1:{{ count1 }}</h1><button @click="addcount">++count/单监听</button>
</template><script setup>
// 导入watch
import {ref , watch} from 'vue'// 声明变量count
const count1=ref(0)// count触发方法
const addcount=()=>{count1.value++
}// 触发监听器---单个数据监听
watch(count1,(newValue,oldValue)=>{console.log(`count发生变化啦!旧值为:${oldValue},新值为:${newValue}`);
})
</script><style lang="less" scoped></style>

传入要侦听的响应式数据(ref对象)和回调函数。回调中可以拿到新值和旧值 

 案例2-监听单个数据:
<template><h1>数量变化2:{{ name }}/{{ count2 }}</h1><button @click="repname">++count/双监听</button>
</template><script setup>
// 导入watch
import {ref , watch} from 'vue'// 声明变量count
const name=ref('李明')
const count2=ref(0)// 触发方法
const repname=()=>{count2.value++name.value='李四到此一游!!!'
}// 触发监听器---多个数据监听
watch([count2,name],([newCount,newName],[oldCount,oldName])=>{console.log(`count变化,旧值为:${oldCount},新值为:${newCount}`);console.log(`name变化,旧值为:${oldName},新值为:${newName}`);
})
</script><style lang="less" scoped></style>

以数组的方式传入多个ref变量,其中一个变化就会触发侦听的回调函数,回调中可以拿到新值和旧值

监听多个值的变化并计算结果,小案例

<template><el-form :model="form" label-width="120px"><el-form-item label="价格"><el-input v-model="form.price" /></el-form-item><el-form-item label="数量"><el-input v-model="form.count" /></el-form-item><el-form-item label="总价"><el-input v-model="form.total" :readonly="true" /></el-form-item><el-form-item><el-button @click="setForm">计算</el-button></el-form-item></el-form>
</template><script setup>
import { ref, watch } from 'vue';const form = ref({ price: '', count: '', total: '' }
);const setForm = () => {form.value = {price: '24',count: '400',total: '9600'}
}// immediate:立刻执行,进入页面就执行一次,一般用于画面的初始化显示。
watch(form, (newVal, oldVal) => {console.log("进入页面执行了")console.log("新:" + newVal + ",旧:" + oldVal);
}, {immediate: true
})// deep:深度监视,如果要监听的响应式对象中有多个属性,默认是浅层监听。
// 传入的响应式对象,如果是简单类型,可以直接监听,如果是复杂类型,监视不到复杂类型内部属性的变化,按照下面的示例,只有form.value重新设置了一个对象,监听才会触发
// 只有对象的地址发生了变化,才会触发监听,设置deep为true时,对象及对象中的某个属性发生变化时,也可以监听到
// 如果对象中的属性过多,会影响使用,一般不建议开深度监听// 深度监听
watch(form, (newval, oldVal) => {console.log("深度监听触发")console.log(newval);
}, { deep: true })// 精确侦听对象的某个属性
watch(() => form.value.price,(newVal, oldVal) => {console.log("精确侦听对象的某个属性");console.log(newVal, oldVal);}
)// 可以侦听某两个属性操作后的值
watch(() => Number(form.value.price) * Number(form.value.count),(sum) => {console.log("执行了");form.value.total = ''if (sum) {form.value.total = sum.toFixed(2);}}
)
</script><style></style>

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

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

相关文章

聪明高效能力广,AGI如何赋能内容管理?

文 | 智能相对论 作者 | 叶远风 毫无疑问&#xff0c;现在的大模型在技术比拼之外&#xff0c;如何通过产品化的方式走入到实际业务&#xff0c;是各厂商的着力点。 而一些一贯与数字化场景紧密融合的服务厂商&#xff0c;在大模型浪潮一开始就已经走在落地一线。 大数据基…

FreeRTOS 时间管理和定时器

FreeRTOS 是一个开源的实时操作系统&#xff0c;提供了丰富的时间管理和定时器功能&#xff0c;用于实现任务调度、延时等操作。在本文中&#xff0c;我们将深入探讨 FreeRTOS 的时间管理和定时器相关的内容。 时间管理 FreeRTOS 提供了以下几种与时间相关的管理功能&#xf…

【C++高阶(八)】单例模式特殊类的设计

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 单例模式 1. 前言2. 设计一个不能被拷贝/继承的…

SVN搭建指导

环境 centos 7.9 SVN安装方式一&#xff1a;yum 1.1 http服务 至今还没有搞定网页版&#xff0c;网页版需要搭建apache http服务。遇到如下问题&#xff1a; centos - svn: Could not open the requested SVN filesystem - Stack Overflow 在试了加777权限&#xff0c;加a…

c语言:指针作为参数传递

探究实参与形参它们相互独立 由于主调函数的变量a&#xff0c;b与被调函数的形参x&#xff0c;y它们相互独立。函数 swap 可以修改变量x&#xff0c;y&#xff0c;但是却无法影响到主调函数中的a&#xff0c;b。 现在利用取地址运算符&#xff0c;分别打印它们的首地址&#x…

生物识别规划人脸识别方案的概述

方案概述 人脸识别方案采用高性能AI芯片&#xff0c;支持RGB和IR摄像头&#xff0c; 支持LCD显示屏。方案特点 • 普通RGB摄像头和IR摄像头同时参与3D成像RGB摄像头 支持屏幕回显 • 双目摄像头得到特征点视差计算人脸相 对3D深度信息&#xff0c; 同时利用可见光和红外 光谱信…

Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验

Axure RP 8&#xff0c;一款引领潮流的交互式原型设计工具&#xff0c;为设计师提供了无限的可能性&#xff0c;让他们能够创造出逼真的原型&#xff0c;从而更好地展示和测试他们的设计。 Axure RP 8拥有丰富的功能和工具&#xff0c;让设计师可以轻松地创建出复杂的交互式原…

SQLite数据库的增删改查

一、前言 这篇文章主要针对Android自带的轻量级数据库SQLite 实现增删改查。该数据库常用于本地数据的储存喝管理。例如&#xff0c;可以将用户信息&#xff0c;日志数据等重要信息存储在SQLite数据库中。 二、代码实现 1.创建MySqliteOpenHelp作为工具类 /*** MySqliteOpen…

GSCoolink GSV1201E Type C/DP1.2转HDM1.4

DisplayPort 1.2 to HDMI 1.4 Converter with Embedded MCU 功能特征 1、GSV1201E是一款高性能、低功耗、USB Type-C Alternate Mode DisplayPort 1.2 to HDMI 1.4转换器。 2、显示接口接收器支持21.6Gbps(HBR2&#xff0c;4-lane)。 3、HDMI发射器支持9Gbps(TMDS3G3Lane)。…

Swagger2接口测试文档

目录 一、Swagger简介 1.1 Swagger是什么&#xff1f; 1.2 为什么要用Swagger 1.3 Swagger注解 二、Spring集成Swagger 三、测试环境配置 一、Swagger简介 1.1 Swagger是什么&#xff1f; Swagger是一款RESTFUL接口的文档在线自动生成功能测试功能软件。Swagger是一个规…

git如何修改提交代码时的名字和邮箱?

在Git中修改提交时使用的用户名和电子邮件地址&#xff0c;你可以通过配置全局或本地的Git配置文件来实现。全局配置适用于你系统上的所有Git仓库&#xff0c;而本地配置只适用于当前仓库。 修改全局用户名和邮箱 如果你想要更改全局的用户名和邮箱&#xff0c;你可以使用下面…

Linux之进程(五)(进程控制)

目录 一、进程创建 1、fork函数创建进程 2、fork函数的返回值 3、fork常规用法 4、fork调用失败的原因 二、进程终止 1、进程终止的方式 2、进程退出码 3、进程的退出方法 三、进程等待 1、进程等待的必要性 2、wait函数 3、waitpid函数 四、进程程序替换 1、概念…

armv8-a 介绍

ARMv8-A 是针对应用配置文件的最新一代 ARM 架构。现在包括32位执行状态和64位执行状态。ARMv8 引入了使用 64 位宽寄存器执行执行的能力,但提供了向后兼容机制以使现有 ARMv7 软件能够执行。 AArch64是用于描述 ARMv8 架构的 64 位执行状态的名称。AArch32描述了ARMv8架构的…

Android studio中导入opencv库

具体opencv库的导入流程参考链接&#xff1a;Android Studio开发之路 &#xff08;五&#xff09;导入OpenCV以及报错解决 一、出现的错误&#xff1a;NullPointerException: Cannot invoke “java.io.File.toPath()” because “this.mySdkLocation” is null 解决办法&#…

北斗卫星导航系统介绍

1.北斗卫星导航系统 1.1概述 北斗卫星导航系统&#xff08;BeiDou&#xff08;COMPASS&#xff09;Navigation Satellite System&#xff09;是中国正在实施的自主发展、独立运行的全球卫星导航系统。系统建设目标是&#xff1a;建成独立自主、开放兼容、技术先进、稳定可靠的…

java获取当前线程的上下文类加载器(context ClassLoader)

当前线程的上下文类加载器初始设置等于加载该应用的类加载器。 代码示例&#xff1a; package com.thb;public class Demo4 {public static void main(String[] args) {System.out.println(Thread.currentThread().getContextClassLoader());} }运行输出&#xff1a;

客户需求分析常用的ChatGPT通用提示词模板

客户需求调研&#xff1a;如何进行客户需求调研&#xff0c;获取准确的需求信息&#xff1f; 客户画像建立&#xff1a;如何建立客户画像&#xff0c;深入了解客户特征和需求&#xff1f; 痛点识别与解决&#xff1a;如何识别客户的痛点&#xff0c;并制定相应的解决方案&…

k8s 中部署Jenkins

创建namespace apiVersion: v1 kind: Namespace metadata:name: jenkins创建pv以及pvc kind: PersistentVolume apiVersion: v1 metadata:name: jenkins-pv-volumenamespace: jenkinslabels:type: localapp: jenkins spec:#storageClassName: manualcapacity:storage: 5Giacc…

提高Spring Boot技能的9种方法

以下是提高 Spring Boot 技能的 9 种方法&#xff1a; 1. 外部化您的配置&#xff1a; 充分利用 Spring Boot 潜力的另一种方法是尽可能地尝试外部化您的配置&#xff0c;而不是对其进行硬编码。外部化您的配置将使您的应用程序更加灵活且更易于管理。 外部化配置的另一个优点…

地质灾害监测预警解决方案

目录 1.前言 2.滑坡监测站建设方案 2.1建站方案 2.2监测指标体系 2.3监测设备配置 3.地面沉降监测建设方案 3.1建设方案 3.2监测指标体系 3.3监测设备配置 4.泥石流监测站建设方案 4.1建设方案 4.2监测指标体系 4.3监测设备配置 5.岩溶塌陷监测站方案 5.1建站方案…