vue(七) vue进阶
目录
第一课:Vue方法、计算机属性及侦听器
一、数组变化侦测
方法1:变更方法
方法2:替换一个数组
例子:小Demo:合并两个数组
二、计算属性
1.基础(不推荐)
2.使用计算属性来完成案例
3.使用函数的方式去完成
计算机属性缓存 vs 方法
三、侦听器
例子:
第二课:Vue的表单绑定
1. 基本的表单绑定
文本输入框绑定
2. 处理复选框和单选框
单选框绑定
复选框绑定
3. 处理下拉框
4. 处理文本区域
5. 动态表单和验证
6.总结
第三课:v-model修饰符
第一课:Vue方法、计算机属性及侦听器
一、数组变化侦测
假设我们写了一个数组,现在想让该数组中新增一条数据,那么如何去实现呢?
给出例子如下:
<template><h3>数组变化侦听</h3><button @click="addListHandler">添加数据</button><ul><li v-for="(item,index) of names" :key="index">{{ item }}</li></ul>
</template>
<script>export default{data(){return{names:['张三','李四','王五']}},methods:{addListHandler(){}}}
</script>
现在要求在上述的数组中再添加一条,如何操作呢?
方法1:变更方法
Vue能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。(变更方法,顾名思义,就是会对调用它们的原数组进行变更。)这些变更方法包括:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()

那么此时点击按钮就会更新:

方法2:替换一个数组
变更方法,顾名思义,就是会对调用它们的原数组进行变更。相对地,也有一些不可变(immutable)方法,例如fiter(),concat()和slice(),这些都不会更改原数组,而总是返回一个新数组。当遇到的是非变更方法时,我们需要将旧的数组替换为新的。
这样写的话不会引起ui的自动更新,但是当我们输出程序的时候发现数组已经合并了一个新元素


那如果我想让UI发生变化呢?--无非就是重新赋值覆盖旧数组;

例子:小Demo:合并两个数组
<template><h3>数组变化侦听</h3><button @click="addList">合并数组</button><h3>数组1</h3><p v-for="(item,index) of nums1" :key="index">{{ item }}</p><h3>数组2</h3><p v-for="(item,index) of nums2" :key="index">{{ item }}</p>
</template>
<script>export default{data(){return{names:['张三','李四','王五'],nums1:[1,2,3,4,5],nums2:[6,7,8,9,10]}},methods:{addList(){this.nums1 = this.nums1.concat(this.nums2) }}}
</script>
二、计算属性
模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。因此我们推荐使用计算属性来描述依赖响应式状态的复杂逻辑。
(下面是一个简单的判断长度的判断-大于0返回Yes,否则返回No)
1.基础(不推荐)
<template><div><h3>{{ qcby.name }}</h3><p>{{qcby.content.length > 0 ?'Yes' : "No" }}</p></div>
</template>
<script>export default{data(){return{qcby:{name:"计算属性",content:['前端','Java','python'] }}}}
</script>
2.使用计算属性来完成案例
<template><div><h3>{{ qcby.name }}</h3><p>{{ qqqq }}</p></div>
</template>
<script>export default{data(){return{qcby:{name:"计算属性",content:['前端','Java','python'] }}},//计算属性computed:{qqqq(){return this.qcby.content.length > 0 ? 'Yes':'No'}}}
</script>
3.使用函数的方式去完成
<template><div><h3>{{ qcby.name }}</h3><p>{{ yyyy() }}</p></div>
</template>
<script>export default{data(){return{qcby:{name:"函数",content:['前端','Java','python'] }}},//函数的方式去完成methods:{yyyy(){return this.qcby.content.length > 0 ? 'Yes':'No'}}}
</script>
那么既然可以使用函数的方式去完成,为什么要弄一个计算属性呢?
计算机属性缓存 vs 方法
你可能注意到我们在表达式中像这样调用一个函数也会获得和计算属性相同的结果
重点区别:
计算属性:计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算(即一次调用)
方法:方法调用总是会在重渲染发生时再次执行函数(即多次调用)

如上,在上述的显示中:
计算属性:只会计算一次
方法:会计算四次
三、侦听器
我们可以使用watch选项在每次响应式属性发生变化时触发一个函数
例子:
<template><h3>侦听器</h3><p>{{ message }}</p><button @click="clickHandle">修改数据</button>
</template>
<script>export default{data(){return{message:"前端"}},methods:{clickHandle(){this.message = 'python'}},watch:{//函数名称必须与侦听的数据对象保持一致// newVlaue:改变之后的数据// oldValue:改变之前的数据message(newVlaue,oldValue){console.log(newVlaue,oldValue);}}}
</script>
第二课:Vue的表单绑定
在 Vue 中,处理表单绑定主要是通过 v-model 指令来实现的。v-model 可以帮助我们在表单元素(如文本框、复选框、单选框、下拉框等)和 Vue 数据之间建立双向绑定,使得数据和视图可以自动同步。
下面我将详细介绍如何在 Vue 中处理表单绑定,包括常见的表单元素的绑定方式。
1. 基本的表单绑定
在 Vue 中,使用 v-model 可以方便地实现双向数据绑定。v-model 会自动处理用户输入和数据的同步更新。最常见的表单元素包括文本输入框、单选框、复选框和下拉框。
文本输入框绑定
文本框(<input>)是最基本的表单元素,通过 v-model 可以实现双向绑定。
<template><div><label for="username">用户名:</label><input type="text" id="username" v-model="username" /><!-- 在这里获取--><p>你输入的用户名是:{{ username }}</p></div>
</template><script>
export default {data() {return {username: '' //在这里返回};}
};
</script>
解释 :
- 通过 v-model="username",输入框的值会绑定到 Vue 实例中的 username 数据属性。
- 当用户在输入框中输入内容时,username 会自动更新,反之当 username 的值变化时,输入框的值也会同步变化。
2. 处理复选框和单选框
单选框绑定
单选框(<input type="radio">)用于从多个选项中选择一个,v-model 也能帮助你实现绑定。
<template><div><label><input type="radio" value="Male" v-model="gender" /> 男</label><label><input type="radio" value="Female" v-model="gender" /> 女</label><p>你选择的性别是:{{ gender }}</p></div>
</template><script>
export default {data() {return {gender: 'Male' //默认是Male};}
};
</script>
解释 :
- v-model="gender" 使得 gender 与选中的单选框同步。当用户选择不同的性别时,gender 会自动更新为对应的值。
复选框绑定
复选框(<input type="checkbox">)允许用户选择多个选项。通过 v-model,你可以将复选框的选中状态绑定到一个数组中。
<template><div><label><input type="checkbox" value="Vue" v-model="skills" /> Vue</label><label><input type="checkbox" value="React" v-model="skills" /> React</label><label><input type="checkbox" value="Angular" v-model="skills" /> Angular</label><p>你掌握的技能:{{ skills.join(', ') }}</p></div>
</template><script>
export default {data() {return {skills: []};}
};
</script>
解释:
- v-model="skills" 会将选中的复选框的值添加到 skills 数组中。数组中会包含用户选中的所有技能项。
3. 处理下拉框
下拉框(<select>)也可以通过 v-model 来实现数据绑定,用户选择的选项会绑定到 Vue 实例中的数据属性。
<template><div><label for="language">选择你的语言:</label><select v-model="language"><option value="English">英语</option><option value="Chinese">中文</option><option value="Spanish">西班牙语</option></select><p>你选择的语言是:{{ language }}</p></div>
</template><script>
export default {data() {return {language: 'English'};}
};
</script>
解释:
- v-model="language" 使得 language 与下拉框的选中值进行双向绑定。用户选择的语言会更新 language 的值。
4. 处理文本区域(<textarea>)
如果表单中有文本区域(<textarea>),你同样可以使用 v-model 来绑定数据。
<template><div><label for="description">描述:</label><textarea id="description" v-model="description"></textarea><p>你的描述:{{ description }}</p></div>
</template><script>
export default {data() {return {description: ''};}
};
</script>
解释:
- v-model="description" 使得<textarea> 的值与 description 数据属性绑定。当用户修改文本框内容时,description 的值会自动更新。
5. 动态表单和验证
在实际项目中,我们通常需要动态渲染表单元素,并且对用户输入进行验证。Vue 提供了强大的功能来支持这种需求。你可以结合 Vue 的表单验证库(如 VeeValidate)来进行表单验证,或者自行处理验证逻辑。
例如,创建一个简单的表单验证:
<template><div><label for="email">电子邮件:</label><input type="email" id="email" v-model="email" /><p v-if="!isValidEmail">请输入有效的电子邮件地址。</p><label for="password">密码:</label><input type="password" id="password" v-model="password" /><p v-if="password.length < 6">密码长度不能少于 6 个字符。</p><button :disabled="!isFormValid">提交</button></div>
</template><script>
export default {data() {return {email: '',password: ''};},computed: {isValidEmail() {const regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;return regex.test(this.email);},isFormValid() {return this.isValidEmail && this.password.length >= 6;}}
};
</script>
解释:
- 通过计算属性 isValidEmail 和 isFormValid 来验证表单输入。
- 电子邮件和密码的输入字段分别使用 v-model 来绑定到 email 和 password 数据属性。
- 提交按钮通过 :disabled 属性来禁用,直到表单验证通过。
6.总结
在 Vue 中,处理表单绑定非常简单,主要依赖 v-model 指令,它能自动处理表单元素和 Vue 数据的双向绑定。通过 v-model,你可以轻松地将数据与表单控件(如文本框、单选框、复选框、下拉框等)进行绑定,从而实现数据与视图的同步。
表单验证可以通过计算属性、方法和条件渲染来完成,确保表单的正确性和有效性。
通过这些基本的操作,你可以在 Vue 中高效地处理表单输入、更新和验证等任务。
第三课:v-model修饰符
v-model也提供了修饰符:lazy、number、trim .lazy
默认情况下,v-model会在每次input事件后更新数据。你可以添加lazy修饰符来改为在每次change事件后更新数据
<template><input type="text" v-model.lazy="message"><p>{{ message }}</p>
</template>
<script>export default{data(){return{message:""}}}
</script>
number:只能接受数值类型的数据
trim:去掉前后空格
相关文章:
vue(七) vue进阶
目录 第一课:Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1:变更方法 方法2:替换一个数组 例子:小Demo:合并两个数组 二、计算属性 1.基础(不推荐) 2.使用计算属性来完成案例 3.使用函数的方…...
[Transformer] The Structure of GPT, Generative Pretrained Transformer
The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work...
Django Admin 自定义操作封装
1. 为什么需要封装? 在Django开发中,我们经常需要在Admin界面添加自定义操作按钮,以便管理员执行特定的任务。通过封装,我们可以: 减少重复代码统一管理自定义操作的逻辑提高代码的可维护性和可扩展性 © ivwdcwso (ID: u012172506)2. CustomActionMixin 的实现 让我…...
http和https有哪些不同
http和https有哪些不同 1.数据传输的安全性:http非加密,https加密 2.端口号:http默认80端口,https默认443端口 3.性能:http基于tcp三次握手建立连接,https在tcp三次握手后还有TLS协议的四次握手确认加密…...
PL/SQL语言的数据库交互
PL/SQL语言的数据库交互 引言 在当今的信息化时代,数据库管理系统(DBMS)在各行各业中扮演着至关重要的角色。为了高效地与数据库进行交互,许多程序员、数据库管理员和系统分析师选择使用PL/SQL(Procedural Language/…...
亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?
三防笔记本是什么意思?和普通笔记本的优势在哪里? 在现代社会中,笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而,在一些特殊行业或环境中,普通笔记本电脑由于其脆弱性和对环境条件的敏感性,往…...
从项目代码看 React:State 和 Props 的区别及应用场景实例讲解
在 React 中,state 和 props 是组件的两个重要概念,它们有不同的作用和应用场景。理解它们之间的区别对于开发 React 应用至关重要。 1. state 和 props 的区别 props (属性): props 是由父组件传递给子组件的数据或函数。props 是只读的&am…...
Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
Vue 学习之旅:核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅:核心技术学习总结与实战案例分享一、指令补充(一)指令修饰符(二)v-bind 对样式操作的增强(三)v-model 应用于其…...
freertos的基础(二)内存管理:堆和栈
1. 堆(Heap) 定义 堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案(如 heap_1、heap_2、heap_4 等),开发者可以根据需求选择合适的内存管理策略。 作用 用于动态分配内存,例…...
vue \n 换行不不显示
Vue 中,直接使用包含 \n 的字符串进行渲染时,换行符不会被识别为 HTML 的换行,因为 Vue 默认会将其视为普通文本。 对此提供两种解决办法 方法一:使用 v-html 指令替换 \n 为 <br> <template><div v-html"…...
GPT 系列论文精读:从 GPT-1 到 GPT-4
学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT,GPT-2,GPT-3 论文精读【论文精读】…...
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
Excel中双引号问题
背景: 从Excel中读取数据时,发现有的单元格读出来是一个双引号,有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…...
【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
Stream-Based Selective Sampling Stream-based selective sampling 是一种主动学习方法,在处理大量数据流时特别有用。它允许学习算法动态选择是否对当前数据实例进行标注(通过与 Oracle 交互)。此方法主要应用于流数据场景中,目…...
elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…...
SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
文章目录 1、Servlet 容器与线程池管理1.1 线程池的作用1.2 线程池的配置 2、HTTP 请求的线程隔离2.1 请求上下文和会话信息2.2 多线程处理的隔离性 3、 ThreadLocal 和线程上下文隔离3.1ThreadLocal的使用3.2 保证线程隔离性 4、Async异步任务的线程隔离4.1 异步任务的线程池4…...
【LLM】25.1.11 Arxiv LLM论文速递
25.1.10 12:00 - 25.1.11 12:00 共更新36 篇 —第1篇---- Supervision policies can shape long-term risk management in general-purpose AI models 🔍 关键词: 通用型人工智能,风险管理,监督政策,模拟框架 PDF链接 摘要: 通…...
单片机实物成品-012 酒精监测
项目介绍 本项目以软硬件结合的方式,选择 C 语言作为程序硬件编码语言, 以 STM32 单片机作为核心控制板,在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测,且对高浓度酒精采取强制干预和紧急预警,并将数据通过…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…...
如何用SMUDebugTool彻底掌控你的AMD Ryzen处理器性能调优
如何用SMUDebugTool彻底掌控你的AMD Ryzen处理器性能调优 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.co…...
智能检索新范式,让AIAgent自主决策,提升RAG效率100%!
市面上的 RAG 系统,不管叫什么名字,本质上只有两种做法: 第一种,一次性检索。把用户的 query 向量化,从语料库里捞出 Top-K 个文档片段,拼成一个大 prompt 塞给模型。GraphRAG、HippoRAG、LightRAG 都属于…...
告别虚频困扰:用VASP+DynaPhoPy搞定高温材料声子谱的保姆级教程
高温材料声子谱计算实战:从虚频困境到非谐解决方案 引言:虚频问题的根源与突破路径 在计算材料学领域,声子谱分析是理解材料动力学稳定性和热力学性质的核心手段。然而许多研究者都遭遇过这样的困境:对实验合成的材料进行简谐近似…...
Vue3 图片标框功能实现方案
基于 Vue3 组合式 API 的图片标框(画框、标注、选框)完整实现,核心逻辑封装在 GetBoxes 组件里,复制就能用 一、功能说明 ✅ 在图片上鼠标拖拽画矩形框 ✅ 实时显示框坐标(x, y, width, height) ✅ 支持多…...
串口通信粘包问题:成因深度解析与项目实战解决方案
在嵌入式开发、工业工控、上位机下位机交互项目中,串口(RS232/RS485)是最基础、最常用的通信方式。绝大多数开发者都遇到过这样的问题:串口接收的数据偶尔错乱、解析报错、数据拼接异常,单次接收的数据时而半包、时而多…...
基于MAX78000的离线鸟类声音识别:边缘AI从数据到部署全流程解析
1. 项目概述:当边缘AI“听懂”鸟鸣在野外生态监测或自家后院观鸟时,你是否有过这样的经历:听到一阵清脆或婉转的鸟鸣,却完全不知道是哪位“歌唱家”在表演?传统的鸟类识别依赖专家经验和图鉴比对,不仅门槛高…...
Hindsight测试策略:单元测试、集成测试和端到端测试
Hindsight测试策略:单元测试、集成测试和端到端测试 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight作为一款专注于Agent Memory的开源项目,其可…...
RevSSH反向SSH隧道:无公网IP设备的安全远程运维方案
1. 这不是又一个SSH封装工具——RevSSH解决的是“根本性连接悖论”你有没有遇到过这样的场景:一台部署在客户内网的嵌入式设备,没有公网IP,NAT穿透失败,防火墙策略死死锁住所有入向端口,连ICMP都被禁了;或者…...
基于GSM与Arduino的远程控制系统:DIY电话控制与短信报警方案
1. 项目概述与核心价值如果你曾经想过,在离家几十公里外,仅凭一部普通的手机,就能远程打开家里的车库门、查看门窗是否关好,甚至在异常情况发生时让系统自动打电话给你报警,那么这个基于GSM的远程控制系统项目…...
CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧
CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像,却发现软件安装速度依然不尽如人意时,这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家,我完全理解这种&quo…...
