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中引入该样式,这样就会使样式全局生效&#…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
