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中引入该样式,这样就会使样式全局生效&#…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
