Vue.js 表单验证实战:一个简单的登录页面

修改日期备注
2025.1.2初版

一、前言

Vue.js 学习第一天——学会一个带有简单表单验证的登录页面。通过这个项目,会对 Vue.js 的核心概念有了更深入的理解,加深掌握如何运用 Vue 的一些强大特性来实现动态交互和数据处理。

二、项目的基本结构

首先,让我们来看一下这个项目的 HTML 结构:

<!DOCTYPE html>
<html lang="en"><head><title>Vue.js 登录页面</title><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><link href="style.css" rel="stylesheet" /><script src="https://unpkg.com/vue@latest"></script></head><body><div id="app"><form><input type="text" v-bind:class="{ 'input-error':!usernameIsValid }"placeholder="enter your username" v-model="username"/><br /><input type="password" v-bind:class="{ 'input-error':!passwordIsValid }"placeholder="enter your password" v-model="password"/><br /><button type="submit" v-on:click.prevent="submit">Login</button></form></div><script>const app = {data() {return {username:"",password:"",};},computed: {usernameIsValid() {return this.username.length >= 3;},passwordIsValid() {return this.password.length >= 3;}},methods: {submit() {if (!this.usernameIsValid ||!this.passwordIsValid) {alert("The input length smaller than 3");} else {alert(`Your input is username: ${this.username}; password: ${this.password}`);}}}};Vue.createApp(app).mount("#app");// vue的挂载</script></body>
</html>

在这个 HTML 页面中,我们使用 Vue.js 构建了一个简单的登录表单。

它的首页展示为:

image-20250102222208013

它包含以下几个部分:

三、引入 Vue.js 及页面设置

<head> 部分,我们进行了一些基础的页面设置和 Vue.js 的引入:

<head><title>Vue.js 登录页面</title><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><link href="style.css" rel="stylesheet" /><script src="https://unpkg.com/vue@latest"></script>
</head>
  • <title> 为我们的页面设置了一个标题,方便在浏览器标签上显示。
  • <meta charset="UTF-8" /> 确保页面可以正确显示各种字符,避免出现乱码。
  • <meta name="viewport" content="width=device-width, initial-scale=1" /> 使页面在不同设备上能根据设备的宽度自适应显示,对于移动设备的适配非常重要哦。
  • <link href="style.css" rel="stylesheet" /> 引入了外部的样式表文件,我们会在后面的部分看到它是如何为页面添加样式的。
  • <script src="https://unpkg.com/vue@latest"></script> 是引入 Vue.js 的最新版本,这样我们就可以在页面中使用 Vue 的各种功能啦。

四、表单元素与 Vue 的双向绑定

<body> 部分,我们有一个 Vue 应用的根元素 <div id="app">,在这个元素内部是我们的表单:

<div id="app"><form><input type="text" v-bind:class="{ 'input-error':!usernameIsValid }"placeholder="enter your username" v-model="username"/><br /><input type="password" v-bind:class="{ 'input-error':!passwordIsValid }"placeholder="enter your password" v-model="password"/><br /><button type="submit" v-on:click.prevent="submit">Login</button></form>
</div>
  • 这里有两个输入框,一个用于输入用户名,一个用于输入密码。它们都使用了 v-model 指令进行双向绑定。以用户名输入框为例:
    • v-model="username" 把输入框的值和 Vue 实例中的 username 数据属性绑定在一起。这意味着当用户在输入框中输入内容时,username 的值会自动更新,反之,当我们在 Vue 代码中修改 username 的值,输入框的内容也会随之改变。这是 Vue 中非常方便的双向数据绑定特性哦 让数据的处理变得简单又直观。
  • 输入框还使用了 v-bind:class 指令:
    • v-bind:class="{ 'input-error':!usernameIsValid }" 是一种动态绑定类名的方式。这里,我们将输入框的类名和一个计算属性 usernameIsValid 关联起来。当 usernameIsValidfalse 时,输入框会被添加 input-error 类,当 usernameIsValidtrue 时,这个类不会被添加。这样可以根据用户输入的有效性动态地改变输入框的样式,是不是很酷呢?

五、Vue 实例中的数据和方法

接着我们来看看 <script> 部分的 Vue 实例:

const app = {data() {return {username:"",password:"",};},computed: {usernameIsValid() {return this.username.length >= 3;},passwordIsValid() {return this.password.length >= 3;}},methods: {submit() {if (!this.usernameIsValid ||!this.passwordIsValid) {alert("The input length smaller than 3");} else {alert(`Your input is username: ${this.username}; password: ${this.password}`);}}}
};
Vue.createApp(app).mount("#app");
  • 数据部分(data

    • data() 函数中定义了 usernamepassword 两个数据属性,它们分别存储用户输入的用户名和密码,初始值都为空字符串。这是我们用来保存用户输入的地方,它们会通过 v-model 与输入框进行双向绑定。
  • 计算属性(computed

    • usernameIsValid 计算属性用于判断用户名是否有效,通过 return this.username.length >= 3; 来检查 username 的长度是否大于或等于 3 个字符。这样,只要 username 的长度发生变化,usernameIsValid 的值就会自动更新。

      image-20250102222257302

    • 同样,passwordIsValid 计算属性会根据 password 的长度来判断密码是否有效。计算属性的优点是它会根据其依赖的数据自动更新,避免了我们手动更新状态,使代码更加简洁和易于维护。

      image-20250102222333990

  • 方法部分(methods

    • submit() 方法是在用户点击登录按钮时调用的。
    • if (!this.usernameIsValid ||!this.passwordIsValid) {...} 这里会检查用户名或密码是否长度不足 3 个字符。如果是,会弹出一个警告信息,告诉用户输入长度太短。
    • else {...} 部分则会在输入合法时,显示用户输入的用户名和密码,这里使用了模板字符串来方便地显示用户输入的信息。

六、样式处理(CSS)

我们的 style.css 文件也起着重要的作用,让我们看看其中的代码:

.input-error {border: 2px solid red;
}

这里定义了 .input-error 类,当输入框被添加这个类时,会显示一个 2 像素宽的红色边框。这与我们在 v-bind:class 中使用的类名相对应,当输入不满足长度要求时,输入框会显示红色边框,让用户知道输入有问题,增强了用户体验。

七、总结

通过这个简单的 Vue.js 登录页面项目,我们学习了很多重要的 Vue 特性:

  • 如何使用 v-model 进行双向数据绑定,使数据在页面和 Vue 实例之间轻松同步。
  • 利用 v-bind:class 进行动态的类名绑定,根据条件为元素添加不同的样式,让页面更加生动和具有交互性。
  • 使用计算属性来自动更新数据的状态,避免了手动更新和复杂的逻辑判断。
  • 实现了简单的表单验证逻辑,处理用户输入并提供反馈。

这个小项目只是 Vue.js 的冰山一角,但通过这样的实践,我们可以逐渐掌握 Vue 的核心概念和使用技巧。希望你也能动手尝试一下,相信你会对 Vue 有更深刻的理解和认识哦 继续加油,一起探索 Vue.js 的更多可能性吧 期待在 Vue 的世界里创造出更棒的项目!

八、后续改进

当然,这个项目还有很多可以改进的地方哦,比如:

  • 可以将验证逻辑扩展为更复杂的规则,例如检查用户名是否包含特殊字符,密码是否包含数字和字母等。
  • 可以将表单提交改为异步操作,通过调用后端 API 来验证用户信息,实现真正的登录功能。
  • 可以添加更多的用户反馈,例如使用 Vue 的组件系统创建一个专门的消息提示组件,取代 alert 函数,使页面更加美观。

注意:记得将 style.css 文件和上述 HTML 文件放在同一个目录下,这样才能正常加载样式哦。

户名是否包含特殊字符,密码是否包含数字和字母等。

  • 可以将表单提交改为异步操作,通过调用后端 API 来验证用户信息,实现真正的登录功能。
  • 可以添加更多的用户反馈,例如使用 Vue 的组件系统创建一个专门的消息提示组件,取代 alert 函数,使页面更加美观。

注意:记得将 style.css 文件和上述 HTML 文件放在同一个目录下,这样才能正常加载样式哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产文本编辑器EverEdit - 批量转码转换行符

1 批量转码&转换行符 1.1 应用场景 如果用户批量在Windows编辑文件&#xff0c;要上传到异构系统&#xff0c;如&#xff1a;Linux&#xff0c;则需要批量转换编码和换行符&#xff0c;此时可以使用EverEdit的批量转码功能。 1.2 使用方法 选择主菜单文档 -> 批量转码…

Java实现下载excel模板,并实现自定义下拉框

GetMapping("excel/download")ApiOperation(value "模板下载")public void getUserRecordTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream outputStream response.getOutputStream();InputStream…

成立一家无人机培训机构需要哪些基础配置

成立一家无人机培训机构&#xff0c;需要一系列基础配置来确保教学质量、学员安全以及机构的正常运营。以下是根据公开发布的信息整理出的关键基础配置&#xff1a; 一、场地配置 1. 飞行场&#xff1a;提供一个安全、宽敞的室外飞行环境&#xff0c;面积最好大于三千平米&…

读“将计算性能调高到极致的基点秘诀”的尝试

看到一篇文章&#xff0c;说最近阅读LAMMPS源码&#xff0c;悟出了很多道理。在计算性能优化这块&#xff0c;源代码作者很多写法我最初不以为意&#xff0c;后来发现是作者有意为之&#xff0c;就是为了把计算性能优化到极致。做计算仿真软件&#xff0c;也特别需要注意这些吧…

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因为后端项目跑错了&#xff0c;两个项目后端名称太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的进程号&#xff0c;获取对应的进程号pid&#xff1b; &#xff08;2&#…

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

[人工智能] 结合最新技术:Transformer、CLIP与边缘计算在提高人脸识别准确率中的应用

随着人工智能的快速发展&#xff0c;特别是深度学习和自然语言处理领域的革命性技术&#xff0c;越来越多的前沿技术被应用于人脸识别中。Transformer架构、CLIP模型以及边缘计算的结合&#xff0c;正成为提升人脸识别准确率和应用效能的关键技术路径。特别是在多样化场景下&am…

Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)

最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法&#xff0c;可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中&#xff0c;后台数据返回格式和指定合并是动态且没有规律的&#xff0c;Element 的示例过于简单&…

关于AI面试系统2025年趋势评估!

在快速发展的科技浪潮中&#xff0c;AI技术正以前所未有的速度渗透到各行各业。企业招聘领域&#xff0c;作为人才选拔的关键环节&#xff0c;也不例外地迎来了AI面试系统的广泛应用和持续创新。2025年&#xff0c;AI面试系统不仅成为企业招聘的主流工具&#xff0c;更在智能化…

MySQL 01 02 章——数据库概述与MySQL安装篇

一、数据库概述 &#xff08;1&#xff09;为什么要使用数据库 数据库可以实现持久化&#xff0c;什么是持久化&#xff1a;数据持久化意味着将内存中的数据保存到硬盘上加以“固化”持久化的主要作用是&#xff1a;将内存中的数据存储在关系型数据库中&#xff0c;当然也可以…

Vue3 组件

文章目录 Vue3 组件概述根组件定义和使用组件样式控制全局样式局部样式深度样式 Vue3 组件 概述 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 根…

怎么在家访问公司服务器?

在日常工作中&#xff0c;特别是对信息技术从业者而言&#xff0c;工作往往离不开公司的服务器。他们需要定期访问服务器&#xff0c;获取一些关键的机密文件或数据。如果您在家办公&#xff0c;并且需要处理未完成的任务&#xff0c;同时需要从公司服务器获取所需的数据&#…

IP-Guard对SolidWorks PDM 加密授权说明

SolidWorks PDM 加密授权说明 一、简介 该功能主要实现了,在SolidWorks Enterprise PDM环境下,可以正常"检入"和"检出" 加密文件,并可以正常预览加密文件。 二、操作说明 2.1 设置加密授权 安装客户端后,登录控制台,选择客户端计算机或组右键选择“…

AI 助力游戏开发中的常用算法实现

在当今的游戏开发领域&#xff0c;人工智能&#xff08;AI&#xff09;技术的应用已经成为推动行业发展的关键力量。AI不仅能够提升游戏的智能化水平&#xff0c;还能够增强玩家的沉浸感和游戏体验。随着技术的进步&#xff0c;AI在游戏设计、开发和测试中的应用越来越广泛&…

重现ORA-01555 细说Oracle Undo 数据管理

1. 概述 1.1. Undo 数据应用 undo数据是&#xff1a; 原始的、修改之前的数据副本 是针对更改数据的每个事务处理所捕获的 至少保留到事务处理结束 用于支持&#xff1a; 回退操作 读取一致性查询 闪回查询、闪回事务处理和闪回表 从失败的事务处理中进行恢复 1.2. 事…

Java 集合 Collection、List、Set

一. Collection 单列集合 1. Collection代表单列集合&#xff0c;每个元素(数据)只包含一个值 2. Collection集合特点 ① List系列集合&#xff1a;添加的元素是有序、可重复、有索引。 ArrayList、LinekdList&#xff1a;有序、可重复&#xff0c;有索引 ② Set系列集合&…

wamp php7.4 运行dm8

背景 1、电脑安装了dm8&#xff0c;具体参照官网dm8安装 2、安装好了wamp&#xff0c;我当前的php版本切换成了7.4的&#xff0c;我wamp的安装路径d:\wamp64\ 操作 3、查看phpinfo&#xff0c;如果Thread Safet为enabled&#xff0c;则选择pdo74_dm.dll&#xff0c;否则选择…

linux 系统 mysql :8.4.3 主从复制 教程及运维命令

一、环境准备 硬件配置CPU2 核 CPU内存2 GB 内存硬盘30 GB 硬盘容量外网访问服务器可以访问外网软件环境操作系统Anolis OS 7.9MySQL版本8.4.3 二、服务器清单 Master192.168.153.221Node192.168.153.222 三、安装mysql &#xff08;两台机器都要下载&#xff09; # 下载 …

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量&#xff0c;输出像素到相机的方向&#xff0c;结果归一化 会随着相机移动而改变 Reflection Vector 反射向量&#xff0c;物体表面法线反射到相机的方向&#xff0c;x和y和camera vector相反 配合hdr使用

复合机器人正以其高效、精准、灵活的特点,逐渐在汽车装配线上崭露头角

随着全球汽车制造业的快速发展&#xff0c;汽车装配线已成为衡量企业生产效率和技术水平的重要标准。传统的装配方式往往依赖于大量的人工操作&#xff0c;这不仅效率低下&#xff0c;还面临着质量不稳定、安全隐患等问题。然而&#xff0c;随着智能科技的飞速进步&#xff0c;…