Vue3【十三】watch监视

Vue3【十三】watch监视

Vue3 中的watch祝你能监视以下四种数据

  1. ref 定义的数据
  2. reactive定义的数据
  3. 函数返回一个值
  4. 一个包含上述内容的数组

案例截图

watch监视

目录结构

在这里插入图片描述

案例代码

Person.vue

<template><div class="person"><!-- <h1>Watch情况1:监视【ref】定义的【基本类型】的数据</h1> --><!-- <h2>当前求和:{{ sum }}</h2><button @click="changeSum">累加+1</button> --><!-- <h1>Watch情况2:监视【ref】定义的【对象类型】的数据</h1> --><!-- <h1>Watch情况3:监视【reactive】定义的【对象类型】的数据</h1><h2>名字:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><button @click="changeName">改名字</button><button @click="changeAge">改年龄</button><button @click="changePerson">改人</button> --><!-- <h1>Watch情况4:监视返回值函数 的数据</h1> --><h1>Watch情况5:监视上述多个数据</h1><h2>名字:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><h2>汽车:{{ person.car.car1 }}、{{ person.car.car2 }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="changeCar1">修改第一辆车</button><button @click="changeCar2">修改第二辆车</button><button @click="changeCar">修改整个车</button></div>
</template><script lang="ts" setup>
import { ref, reactive ,watch } from 'vue';
// Vue3 中的watch祝你能监视一下四种数据
// 1. ref 定义的数据
// 2. reactive定义的数据
// 3. 函数返回一个值
// 4. 一个包含上述内容的数组// 1. ref 定义的数据 --------------------------------
// const sum = ref(0);// 方法
// function changeSum(){
//     sum.value++;
// }// 监视 和 停止监视
// const stopWatch =  watch(sum, (newValue, oldValue) => {
//     console.log('sum变了', newValue, oldValue);
//     // 停止监视
//     if(newValue > 10){
//         stopWatch();
//     }
// })// 2. ref 定义的对象类型数据 ----------------------------
// 数据
// const person = ref({
//     name: '吕洞宾',
//     age: 18000
// })// 方法
// function changeName(){
//     person.value.name = '何仙姑';
// }
// function changeAge(){
//     person.value.age++;
// }
// function changePerson(){
//     person.value = {
//         name: '铁拐李',
//         age: 19000
//     }
// }// 监视 情况一: 监视【ref】定义的【对象类型】的数据,监视的是对象的地址值
// watch(person, (newValue, oldValue) => {
//     console.log('person变了', newValue, oldValue);
// })// 若要监视对象内部的数据,需要使用深度监视
// watch(person, (newValue, oldValue) => {
//     console.log('person变了', newValue, oldValue);
// }, {deep: true})// 监视 情况二: 监视【ref】定义的【对象类型】的数据,监视的是对象的地址值
// 立刻监视 watch的第一个参数是被监视的数据,第二个参数是监视回调函数,第三个参数是配置对象(deep,immediate等等)
// watch(person, (newValue, oldValue) => {
//     console.log('person变了', newValue, oldValue);
// },{deep:true,immediate: true})
// 若修改的是ref定义的对象中的属性,因为newValue和oldValue是同一个对象
// 若修改整个ref定义的对象,newValue是新值,newValue和oldValue是两个不同的对象// 监视 情况三: 监视【active】定义的【对象类型】的数据,且默认开启了深度监视 ----------------
// const person = reactive({
//     name: '吕洞宾',
//     age: 18000
// })
// // 方法
// function changeName(){
//     person.name = '何仙姑';
// }
// function changeAge(){
//     person.age++;
// }
// function changePerson(){
//     // 批量修改对象属性,对象还是原来对象
//     Object.assign( person , {
//         name: '铁拐李',
//         age: 19000
//     })
// }
// // 监视
// watch(person, (newValue, oldValue) => {
//     console.log('person变了', newValue, oldValue);
// })// 4. 函数返回值 -------------------------------------------------------------------------
let person = reactive({name: '吕洞宾',age: 18000,car: {car1: '奔驰',car2: '宝马'}
})
function changeName(){person.name += '何仙姑';
} 
function changeAge(){person.age++;
}
function changeCar1(){person.car.car1 = '仙鹤';
}  
function changeCar2(){person.car.car2 = '毛驴';
}
function changeCar(){person.car = {car1: '艾玛',car2: '雅马哈'}
}
// 监视 响应式对象中的某个属性,且该对象是基本类型的,需要写成函数式
// watch(() => person.name,(newValue, oldValue) => {
//         console.log('name变了', newValue, oldValue);
//     }
// )
// 监视 响应式对象中的某个属性,且该对象是对象类型的,可以直接写、也能写函数式 更推荐写函数
// 想要监视细节,需要手动开启深度监视
// watch(()=>person.car,(newValue, oldValue) => {
//         console.log('car变了', newValue, oldValue);
//     },{deep: true}
// )// 5.数组 监视多个数据---------------------------------------------------------------------------------
watch([()=>person.car.car1,()=>person.age],(newValue, oldValue) => {console.log('car1或年龄变了', newValue, oldValue);},{deep: true}
)</script><style scoped>
.person {background-color: #ff9e4f;box-shadow: 0 0 10px;border-radius: 30px;padding: 30px;
}button {margin: 0 10px;padding: 0 5px;box-shadow: 0 0 5px;;
}
</style>

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

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

相关文章

C++基础编程100题-008 OpenJudge-1.3-06 甲流疫情死亡率

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/06/ 描述 甲流并不可怕&#xff0c;在中国&#xff0c;它的死亡率并不是很高。请根据截止2009年12月22日各省报告的甲流确诊数和死亡数&#xff0c;计算甲流在各省的死亡率。 输入 输入仅一行&#xff…

数据中心运维管理方案

数据中心运维管理方案 随着数据中心在现代信息社会中的重要性日益增加&#xff0c;高效、可靠的运维管理方案成为保障其稳定运行的关键。本文将探讨数据中心运维管理的策略和实践&#xff0c;旨在为运维团队提供全面、系统的管理方法&#xff0c;确保数据中心在任何情况下都能…

Word Split Line

Word Split Line 分割线 https://download.csdn.net/download/spencer_tseng/89413772

小柴带你学AutoSar系列一、基础知识篇(5)makefile基础

Flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qianshang52013/article/details/138140235?spm=1001.2014.3001.5501

国内docker镜像站全军覆没 如何自己部署一个Docker镜像加速服务器?

近日&#xff0c;在使用SJTUG提供的镜像加速拉取镜像的时候死活拉不下来&#xff0c;不管是 docker hub 还是国内的某些镜像站&#xff0c;同样都无法使用&#xff0c;虽然现在还有部分可用的镜像站&#xff0c;但也说不准某一天因为某些原因同样停止提供了&#xff0c;这时候就…

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

Java核心: 类加载器

这一节我们来学习Java的类加载器&#xff0c;以及常用的类加载器实现URLClassLoader。 1. Java类加载器 类加载器用于将字节码读取并创建Class对象。我们知道JVM本身是用C写的&#xff0c;一开始执行的时候由C程序来加载并引导字节码的运行&#xff0c;这些由C编写的加载字节…

[数据集][目标检测]攀墙攀越墙壁数据集VOC格式-701张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;701 标注数量(xml文件个数)&#xff1a;701 标注类别数&#xff1a;1 标注类别名称:["fq"] 每个类别标…

htb-window-2-blue-smb

nmap msf 漏洞搜索 配置 获取flag

SpringBoot整合钉钉实现消息推送

前言 钉钉作为一款企业级通讯工具&#xff0c;具有广泛的应用场景&#xff0c;包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送&#xff0c;我们可以实现以下功能&#xff1a; 实时向指定用户或群组发送消息通知。自定义消息内容…

基于关键词自动采集抖音视频排名及互动数据(点赞、评论、收藏)

在当今的社交媒体时代&#xff0c;抖音作为一个热门短视频平台&#xff0c;吸引了大量用户和内容创作者。对于研究和分析抖音上的热门视频及其互动数据&#xff08;如点赞、评论、收藏等&#xff09;&#xff0c;自动化的数据采集工具显得尤为重要。本项目旨在开发一个基于关键…

嵌入式仪器模块:波形发生器模块(嵌入式)

• 16 位分辨率 • 125 MHz 刷新率 • 支持生成 FSK/ASK 信号 应用场景 • 生成任意标准波形或用户自定义波形 • 在特殊协议通信中模拟某个波形 • 无线充电&#xff08;信号调制&#xff09; 道114输出阻抗Low-ZLow-ZLow-Z输出范围 5 V 5 V 6 V耦合DCDCDC带宽4 MHz10 M…

【UML用户指南】-12-对高级结构建模-接口、类型和角色

目录 1、名称 2、操作 3、关系 4、理解接口 5、常用建模技术 5.1、对系统中的接缝建模 5.2、对静态类型和动态类型建模 5.2.1、对静态类型建模 5.2.2、对动态类型建模 使接口易于理解和易于访问 接口在关于一个抽象做什么的描述与关于这个抽象如何做的实现之间定义了…

atcoder abc357

A Sanitize Hands 问题&#xff1a; 思路&#xff1a;前缀和&#xff0c;暴力&#xff0c;你想咋做就咋做 代码&#xff1a; #include <iostream>using namespace std;const int N 2e5 10;int n, m; int a[N];int main() {cin >> n >> m;for(int i 1…

度小满金融大模型的应用创新

XuanYuan/README.md at main Duxiaoman-DI/XuanYuan GitHub

如何自动化地评估 AIGC 生图的质量?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

网络资源模板--基于Android Studio 实现的音乐播放器

一、项目源码获取(非开源) 关注公众号&#xff1a;《编程乐学》 后台回复&#xff1a;24060801 二、项目测试视频 网络资源模板--基于Android Studio 音乐播放器 三、项目简介 四、项目测试环境 五、项目详情设计图 1.登录注册页面介绍 <?xml version"1.0" enco…

【Git】详解本地仓库的创建、配置以及工作区、暂存区、版本库的认识

一、创建本地仓库 需要将本地仓库放在一个目录下&#xff0c;所以在创建本地仓库之前&#xff0c;应该先创建一个目录&#xff0c;再进入这个目录&#xff1a; 在这个目录中创建一个本地仓库&#xff1a; git init 创建完成后&#xff0c;我们就会发现当前目录下多了一个.git…

ssm604基于Java Web的怀旧唱片售卖系统+vue【已测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…

强!推荐一款开源接口自动化测试平台:AutoMeter-API !

在当今软件开发的快速迭代中&#xff0c;接口自动化测试已成为确保代码质量和服务稳定性的关键步骤。 随着微服务架构和分布式系统的广泛应用&#xff0c;对接口自动化测试平台的需求也日益增长。 今天&#xff0c;我将为大家推荐一款强大的开源接口自动化测试平台: AutoMete…