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

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进阶

目录 第一课&#xff1a;Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1&#xff1a;变更方法 方法2&#xff1a;替换一个数组 例子&#xff1a;小Demo:合并两个数组 二、计算属性 1.基础&#xff08;不推荐&#xff09; 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.数据传输的安全性&#xff1a;http非加密&#xff0c;https加密 2.端口号&#xff1a;http默认80端口&#xff0c;https默认443端口 3.性能&#xff1a;http基于tcp三次握手建立连接&#xff0c;https在tcp三次握手后还有TLS协议的四次握手确认加密…...

PL/SQL语言的数据库交互

PL/SQL语言的数据库交互 引言 在当今的信息化时代&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;在各行各业中扮演着至关重要的角色。为了高效地与数据库进行交互&#xff0c;许多程序员、数据库管理员和系统分析师选择使用PL/SQL&#xff08;Procedural Language/…...

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…...

从项目代码看 React:State 和 Props 的区别及应用场景实例讲解

在 React 中&#xff0c;state 和 props 是组件的两个重要概念&#xff0c;它们有不同的作用和应用场景。理解它们之间的区别对于开发 React 应用至关重要。 1. state 和 props 的区别 props (属性)&#xff1a; props 是由父组件传递给子组件的数据或函数。props 是只读的&am…...

Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)

Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享一、指令补充&#xff08;一&#xff09;指令修饰符&#xff08;二&#xff09;v-bind 对样式操作的增强&#xff08;三&#xff09;v-model 应用于其…...

freertos的基础(二)内存管理:堆和栈

1. 堆&#xff08;Heap&#xff09; 定义 堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案&#xff08;如 heap_1、heap_2、heap_4 等&#xff09;&#xff0c;开发者可以根据需求选择合适的内存管理策略。 作用 用于动态分配内存&#xff0c;例…...

vue \n 换行不不显示

Vue 中&#xff0c;直接使用包含 \n 的字符串进行渲染时&#xff0c;换行符不会被识别为 HTML 的换行&#xff0c;因为 Vue 默认会将其视为普通文本。 对此提供两种解决办法 方法一&#xff1a;使用 v-html 指令替换 \n 为 <br> <template><div v-html"…...

GPT 系列论文精读:从 GPT-1 到 GPT-4

学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】…...

在 Ubuntu 上安装和配置 Redis

在 Ubuntu 上安装和配置 Redis&#xff0c;并使用发布-订阅&#xff08;Pub/Sub&#xff09;功能&#xff0c;可以按照以下步骤进行&#xff1a; 一、安装 Redis 1. 更新包列表 首先&#xff0c;更新本地的包列表以确保获取到最新的软件包信息&#xff1a; sudo apt update…...

Excel中双引号问题

背景&#xff1a; 从Excel中读取数据时&#xff0c;发现有的单元格读出来是一个双引号&#xff0c;有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…...

【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)

Stream-Based Selective Sampling Stream-based selective sampling 是一种主动学习方法&#xff0c;在处理大量数据流时特别有用。它允许学习算法动态选择是否对当前数据实例进行标注&#xff08;通过与 Oracle 交互&#xff09;。此方法主要应用于流数据场景中&#xff0c;目…...

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 &#x1f50d; 关键词: 通用型人工智能&#xff0c;风险管理&#xff0c;监督政策&#xff0c;模拟框架 PDF链接 摘要: 通…...

单片机实物成品-012 酒精监测

项目介绍 本项目以软硬件结合的方式&#xff0c;选择 C 语言作为程序硬件编码语言&#xff0c; 以 STM32 单片机作为核心控制板&#xff0c;在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测&#xff0c;且对高浓度酒精采取强制干预和紧急预警&#xff0c;并将数据通过…...

使用葡萄城+vue实现Excel

最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等&#xff0c;代码实在太多 有需要可留言 第一步&#xff1a;创建表头 请使用官网提供的网址&#xff1a;在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号&#xff0c;创建一个新的sheet页 默认新创建的she…...

【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录

一、import导入css样式 在项目文件中创建一个common文件夹&#xff0c;下面创建一个css文件夹&#xff0c;里面放上style.css文件&#xff0c;编写的是公共样式&#xff0c;我们现在要在App.vue中引入该样式。 在App.vue中引入该样式&#xff0c;这样就会使样式全局生效&#…...

猫抓:网页资源提取工具的全场景应用指南

猫抓&#xff1a;网页资源提取工具的全场景应用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的困境&#xff1a;精心策划的…...

解锁iOS设备:applera1n工具的安全绕过指南

解锁iOS设备&#xff1a;applera1n工具的安全绕过指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n applera1n是一款开源工具&#xff0c;专门为A9-A11芯片的iOS 15.0-16.6.1设备提供激活锁绕过方案…...

云服务器部署大模型

云服务器部署大模型1. 服务器配置2. 大模型下载3. 部署大模型1. 服务器配置 2. 大模型下载 千问2.5-14B-Instruct https://modelscope.cn/models/Qwen/Qwen2.5-14B-Instruct pip install modelscopemodelscope download --model Qwen/Qwen2.5-14B-Instruct --local_dir /root…...

AI赋能:让Kimi和DeepSeek在快马平台上帮你智能解决opencode安装难题

最近在折腾opencv的安装配置时&#xff0c;真是被各种依赖项和环境问题折磨得够呛。直到发现了InsCode(快马)平台的AI辅助开发功能&#xff0c;整个过程突然变得轻松多了。今天就想分享一下&#xff0c;如何用平台集成的Kimi和DeepSeek模型&#xff0c;打造一个智能化的opencv安…...

Nunchaku-flux-1-dev性能调优:针对STM32嵌入式设备演示的图片预处理

Nunchaku-flux-1-dev性能调优&#xff1a;针对STM32嵌入式设备演示的图片预处理 最近在折腾一个智能门禁项目&#xff0c;需要在STM32上跑人脸识别。想法挺简单&#xff0c;本地抓拍人脸&#xff0c;然后传给云端的大模型Nunchaku-flux-1-dev去分析。结果一上手就发现&#xf…...

3个专业技巧:BilibiliDown跨平台B站视频下载器的完整应用指南

3个专业技巧&#xff1a;BilibiliDown跨平台B站视频下载器的完整应用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mi…...

OmenSuperHub:重新定义游戏本性能控制的开源解决方案

OmenSuperHub&#xff1a;重新定义游戏本性能控制的开源解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 痛点解析&#xff1a;你的游戏本是否正遭…...

ai赋能c语言开发:让快马平台自动生成文件io与链表管理代码

AI赋能C语言开发&#xff1a;让快马平台自动生成文件IO与链表管理代码 最近在做一个C语言的通讯录管理系统项目&#xff0c;需要实现联系人信息的增删改查功能&#xff0c;并且要求数据能够持久化保存。作为一个有经验的开发者&#xff0c;我决定尝试用InsCode(快马)平台的AI辅…...

【无人机】基于matlab模拟无人机在一个移动地面车辆自主着陆垂直起降在受风力干扰和转子推力影响【含Matlab源码 15287期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

19. 浮力产生原因演示

8. 浮力产生原因演示 功能介绍: 利用动画演示浮力产生的根本原因——液体对物体上下表面的压力差。界面显示浸没在水中的立方体,侧面标注上下表面的压强 (P=ρghP=\rho ghP=ρgh...