当前位置: 首页 > news >正文

Vue3苦逼的学习之路

        从一名测试转战到全栈是否可以自学做到,很多朋友肯定会说不可能,或就算转了也是个一般水平,我很认同,毕竟没有经过各种项目的摧残,但是还是得踏足一下这个领域。所以今天和大家分享vue3中的相关内容,大佬勿喷。

一:计算属性

案例1:计算属性,且是只读

<script lang="ts" setup name="Person">
import { ref, computed } from 'vue'
let firstName = ref('张')
let lastName = ref('三')// 计算属性,且是只读
let fullName = computed(() => {return firstName.value.slice(0, 1).toUpperCase() + firstName.value.slice(1) + '-' + lastName.value.slice(0, 1)
})
</script>

案例2:计算属性,可读可写

<script lang="ts" setup name="Person">
import { ref, computed } from 'vue'
let firstName = ref('张')
let lastName = ref('三')// 计算属性,可读可写
let fullName_rw = computed({get() {return firstName.value.slice(0, 1).toUpperCase() + firstName.value.slice(1) + '-' + lastName.value.slice(0, 1)},set(val) {const [str1, str2] = val.split('-')firstName.value = str1lastName.value = str2}
})
function changeName() {fullName_rw.value = '李-四'
}
</script>

对于计算属性,一般与get()和set()一起使用

二:watch属性

作用:监视数据的变化,和vue2的watch租用一致

特点:vue3中的watch只能监视以下四种数据

        1、ref定义的数据【一个是基本类型,一个是对象类型】

        2、reactive定义的数据

        3、函数返回一个值(getter函数)

        4、一个包含上述内容的数组

关于watch一共有五种情况:

情况一:监视ref定义的基本数据类型

<template><div class="person"><h2>当前求和为:{{ sum }}</h2><button @click="changeSum">点我sum+1</button></div>
</template><script lang="ts" setup name="Person1">
import { ref, watch } from 'vue'
// 定义数据
let sum = ref(0)function changeSum() {sum.value++
}
//监视ref定义的基本数据,这里监视的就是sum
const stopwatch = watch(sum, (newvalue, oldvalue) => {console.log(newvalue, oldvalue);//解除监视,当sum的值大于等于10时运行解除if (sum.value >= 10) {stopwatch()}
})</script>

情况二:监视ref定义的对象类型的数据

<template><div class="person"><h1>情况2:监视ref定义的对象类型</h1><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改按钮</button><button @click="changePerson">修改整个人</button></div>
</template><script lang="ts" setup name="Person1">
import { ref, watch } from 'vue'
// 监视ref定义的对象类型,直接写数据名,监视的是对象的【地址值】,若想见识对象内部的数据,要手动开启深度监视
// immediate: true, 立即执行
// deep: true, 深度监视
let person = ref({name: 'alex',age: 18
})
// 方法
function changeName() {person.value.name += '~'
}
function changeAge() {person.value.age++
}
function changePerson() {person.value = {name: '李四',age: 20}
}
//监视ref定义的【对象类型】数据,监视的是对象的地址值
watch(person, (newvalue, oldvalue) => {console.log(newvalue, oldvalue);
}, { deep: true, immediate: true })
/*
注意:
1、如果修改的是ref定义的对象中的属性,newvalue和oldvalue都是新值,因为它们是同一个对象
2、如果修改整个ref定义的对象,newvalue是新值,oldvalue是旧值,因为不是同一个对象了
*/
</script>

情况三:监视reactive定义的对象类型

<template><div class="person"><h2>情况3:监视reactive定义的对象类型</h2><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><button @click="changeName1">修改名字</button><button @click="changeAge1">修改按钮</button><button @click="changePerson1">修改整个人</button></div>
</template><script lang="ts" setup name="Person1">
import { ref, watch, reactive } from 'vue'//情况三:监视reactive定义的对象类型数据,且默认开启深度监视
function changeName1() {person1.name += '~'
}
function changeAge1() {person1.age++
}
//reactive不能整体修改,所以下面是无法执行的
function changePerson1() {// person1 = {//     name: '李四',//     age: 20// }//下面是强制修改,但是不是把整个对象修改Object.assign(person1, {name: '李四111',age: 28})
}
//监视,情况三:监视【reactive】定义的【对象类型】数据,且默认是开启深度监视的
watch(person1, (newvalue, oldvalue) => {console.log('person1变化了');console.log(newvalue, oldvalue);
})
</script>

情况四:监视ref或reactive定义的【对象类型】数据中的某个属性

1、若该属性值不是【对象类型】,需要写成函数形式

2、若该属性值依然是【对象类型】,可直接编,也可写成函数,不过建议写成函数

<template><div class="person"><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><h2>车:{{ person.car.C1 }}-{{ person.car.C2 }}</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 name="Person1">
import { reactive, watch } from 'vue'
//数据
let person = reactive({name: "张三",age: 18,car: {C1: '奔驰',C2: '宝马'}
})
// 监视响应式对象中的某个属性,且该属性是基本类型,要写成函数式
watch(() => person.name, (newvalue, oldvalue) => {console.log('person.name变化了', newvalue, oldvalue);
},{deep:true})
</script>

情况五:监视多个数据

<template><div class="person"><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><h2>车:{{ person.car.C1 }}-{{ person.car.C2 }}</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 name="Person1">
import { reactive, watch } from 'vue'
//数据
let person = reactive({name: "张三",age: 18,car: {C1: '奔驰',C2: '宝马'}
})
// 如果是对象之类的,就不用改为函数式了,比如:person.car
watch([() => person.name, () => person.car.C1, person.car], (newvalue, oldvalue) => {console.log('改动了', newvalue, oldvalue);}, { deep: true })

相关文章:

Vue3苦逼的学习之路

从一名测试转战到全栈是否可以自学做到&#xff0c;很多朋友肯定会说不可能&#xff0c;或就算转了也是个一般水平&#xff0c;我很认同&#xff0c;毕竟没有经过各种项目的摧残&#xff0c;但是还是得踏足一下这个领域。所以今天和大家分享vue3中的相关内容&#xff0c;大佬勿…...

AcWing练习题:两点间的距离

给定两个点 P1 和 P2&#xff0c;其中 P1P1 的坐标为 (x1,y1)&#xff0c;P2 的坐标为 (x2,y2)&#xff0c;请你计算两点间的距离是多少。 distance√(x2−x1)^2(y2−y1)^2 输入格式 输入共两行&#xff0c;每行包含两个双精度浮点数 xi,yi&#xff0c;表示其中一个点的坐标…...

文献分享:RoarGraph——跨模态的最邻近查询

文章目录 1. \textbf{1. } 1. 导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. \textbf{2. } 2. 对 OOD \textbf{OOD} OOD负载的分析与验证 2.1. \textbf{2.1. } 2.1. 初步的背景及其验证 2.1.1. \textbf{2…...

故事可视化AI

i68,爱六八,链接你我他 StoryWeaver故事可视化 通过知识增强的角色定制技术&#xff0c;实现高质量的故事可视化论文链接:https://arxiv.org/pdf/2412.07375项目仓库:https://github.com/Aria-Zhangjl/StoryWeaver由厦门大学多媒体可信感知与高效计算教育部重点实验室和网易伏…...

【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门

文章目录 【机器学习篇】从新手探寻到算法初窥&#xff1a;数据智慧的开启之门前言一、什么是机器学习&#xff1f;二、机器学习的基本类型1. 监督学习&#xff08;Supervised Learning&#xff09;2. 无监督学习&#xff08;Unsupervised Learning&#xff09;3. 半监督学习&a…...

ffmpeg八大开发库

‌FFmpeg八大库‌是指FFmpeg项目中最重要的八个库&#xff0c;它们各自承担不同的功能&#xff0c;共同构成了FFmpeg的强大功能。以下是这八大库的详细介绍&#xff1a; ‌libavcodec‌&#xff1a;负责音频和视频的编解码。它支持多种编解码器&#xff0c;如H.264、AAC、MP3、…...

【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题

修复空间参考缺失的图像 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 查看属性坐标 查看属性范围 范围值并不是零或接近于零。 这意味着栅格具有范围,因此其已正确进行...

Linux上安装配置单节点zookeeper

直接先去官网下载安装包&#xff0c; https://downloads.apache.org/zookeeper/ 选择合适的版本&#xff0c;然后上传至服务器 解压&#xff1a; tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz创建data和logs目录 mkdir data mkdir logs配置环境变量&#xff1a; vim /etc/p…...

现代光学基础-1

总结自老师的讲义 yt1 目录 光纤通信系统 组成部分三大里程碑技术实例分析 激光器 定义自振荡器的特性组成输出特性应用领域 受激辐射、自然辐射与吸收 LASER的定义受激辐射的特点光与物质的相互作用能量守恒与材料特性净增益条件 谐振器 定义组成部分性能描述 F-P谐振器&am…...

pytorch中nn.Conv2d详解及参数设置原则

文章目录 基础参数1. in_channels (输入通道数)2. out_channels (输出通道数)3. kernel_size (卷积核大小)4. stride (步幅)5. padding (填充)6. dilation (膨胀)7. groups (分组卷积)8. bias (偏置) 如何设置参数&#xff1f;1. **in_channels 和 out_channels&#xff08;输入…...

T-SQL语言的正则表达式

T-SQL语言的正则表达式 在现代数据库管理系统中&#xff0c;SQL&#xff08;结构化查询语言&#xff09;被广泛用于数据的操作与管理。对数据的查询、插入、更新和删除几乎是每一个数据库管理系统中的基本功能。T-SQL&#xff08;Transact-SQL&#xff09;是微软对SQL的扩展&a…...

UDP_TCP

目录 1. 回顾端口号2. UDP协议2.1 理解报头2.2 UDP的特点2.3 UDP的缓冲区及注意事项 3. TCP协议3.1 报头3.2 流量控制2.3 数据发送模式3.4 捎带应答3.5 URG && 紧急指针3.6 PSH3.7 RES 1. 回顾端口号 在 TCP/IP 协议中&#xff0c;用 “源IP”&#xff0c; “源端口号”…...

Python 中常见的数据结构之二推导式

Python 中常见的数据结构之二推导式 使用推异式列表推导式字典推导式集合推导式 使用推异式 推导式是一种从已存在的序列中快速构建列表(list)、集合(set) 和 字典(dictionary)方式。Python 支持 3 种不同类型的推导式&#xff1a; 列表推导式&#xff1b;字典推导式&#xf…...

STM32 拓展 低功耗案例3:待机模式 (hal)

配置PA0的两种方式&#xff1a; 第一种 第二种 复制寄存器代码然后对其进行修改 mian.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body…...

【开源社区openEuler实践】探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石

title: 探索 Yocto-Meta-OpenEuler&#xff1a;嵌入式开发的强大基石 date: ‘2024-11-19’ category: blog tags: Yocto-Meta-OpenEuler嵌入式系统开源项目定制化开发 sig: EmbeddedTech archives: ‘2024-12’ author:way_back summary: Yocto-Meta-OpenEuler 为嵌入式系统开…...

C++ hashtable

文章目录 1. 基本概念2. 哈希函数3. 哈希冲突及解决方法开放定址法链地址法再哈希法建立公共溢出区4. 哈希表的操作实现5. 内存管理及优化 时间复杂度理想情况&#xff08;无哈希冲突或冲突极少&#xff09;一般情况&#xff08;考虑哈希冲突及解决方法&#xff09;综合来看 以…...

JS (node) 的 ACM 模式 + debug方法 (01背包为例)

文章目录 JS 的 ACM 模式输入处理 JS dubug (01背包为例)动态输入在本地通过 Node.js 运行和调试 硬编码 Hard CodingVS Code JS 的 ACM 模式 在 JavaScript 中&#xff0c;ACM 模式一般通过 Node.js 的 readline 模块实现。 输入处理 使用 readline 模块监听输入。 将每行输…...

vue设计与实现-框架设计

权衡的艺术 命令式和声明式 视图层框架通常分为命令式和声明式&#xff0c;各有优缺。jquery是一种命令式框架。命令式框架关注过程&#xff0c;而声明式框架关注结果。对于vue来说&#xff0c;过程被vue封装了&#xff0c;所以vue内部是命令式的&#xff0c;但vue暴露给用户…...

Stable Diffusion和Midjourney有什么区别?

Stable Diffusion 和 Midjourney 主要有以下区别&#xff1a; 目录 费用与可访问性 设备要求 安装与使用 学习成本 图像生成效果 可控性与定制性 私密性 费用与可访问性 Stable Diffusion&#xff1a;开源免费&#xff0c;任何人都可以免费下载并自行部署使用&#xf…...

即插即用,无痛增强模型生成美感!字节跳动提出VMix:细粒度美学控制,光影、色彩全搞定

文章链接&#xff1a;https://arxiv.org/pdf/2412.20800 代码地址&#xff1a;https://github.com/fenfenfenfan/VMix 项目地址&#xff1a;https://vmix-diffusion.github.io/VMix/ 亮点直击 分析并探索现有模型在光影、色彩等细粒度美学维度上生成图像的差异&#xff0c;提出…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...