当前位置:首页 > VUE

vue实现简单登录验证

2026-01-22 16:42:28VUE

实现登录表单基础结构

使用Vue的模板语法构建登录表单,包含用户名和密码输入框及提交按钮。表单需绑定v-model实现双向数据绑定,并监听submit事件。

<template>
  <form @submit.prevent="handleSubmit">
    <div>
      <label for="username">用户名</label>
      <input 
        type="text" 
        id="username" 
        v-model="form.username"
        @blur="validateUsername"
      >
      <span class="error" v-if="errors.username">{{ errors.username }}</span>
    </div>
    <div>
      <label for="password">密码</label>
      <input 
        type="password" 
        id="password" 
        v-model="form.password"
        @blur="validatePassword"
      >
      <span class="error" v-if="errors.password">{{ errors.password }}</span>
    </div>
    <button type="submit">登录</button>
  </form>
</template>

设置数据模型与验证规则

在Vue组件中定义表单数据和错误消息的响应式对象,包含基础验证方法。使用refreactive创建响应式数据,验证逻辑应返回布尔值。

<script setup>
import { reactive } from 'vue';

const form = reactive({
  username: '',
  password: ''
});

const errors = reactive({
  username: '',
  password: ''
});

const validateUsername = () => {
  if (!form.username.trim()) {
    errors.username = '用户名不能为空';
    return false;
  }
  errors.username = '';
  return true;
};

const validatePassword = () => {
  if (!form.password) {
    errors.password = '密码不能为空';
    return false;
  }
  if (form.password.length < 6) {
    errors.password = '密码长度至少6位';
    return false;
  }
  errors.password = '';
  return true;
};
</script>

处理表单提交逻辑

创建提交处理方法,在提交前验证所有字段。通过every方法检查所有验证是否通过,验证通过后可执行API请求等后续操作。

const handleSubmit = () => {
  const isValid = [validateUsername(), validatePassword()].every(Boolean);
  if (!isValid) return;

  // 模拟API请求
  console.log('提交数据:', form);
  alert(`欢迎, ${form.username}!`);
};

添加实时输入验证

在输入框上添加@input事件实现边输入边验证,提升用户体验。注意避免频繁验证导致的性能问题,可考虑使用防抖。

<input 
  type="text"
  id="username"
  v-model="form.username"
  @blur="validateUsername"
  @input="validateUsername"
>

样式优化(可选)

通过CSS为错误消息添加视觉反馈,使用Vue的class绑定动态控制错误状态。

.error {
  color: red;
  font-size: 0.8em;
  margin-left: 5px;
}

input.invalid {
  border-color: red;
}
<input 
  :class="{ invalid: errors.username }"
  type="text"
  id="username"
  v-model="form.username"
>

完整组件示例

整合所有代码的完整单文件组件示例:

<template>
  <form @submit.prevent="handleSubmit">
    <div>
      <label for="username">用户名</label>
      <input 
        :class="{ invalid: errors.username }"
        type="text" 
        id="username" 
        v-model="form.username"
        @blur="validateUsername"
        @input="validateUsername"
      >
      <span class="error" v-if="errors.username">{{ errors.username }}</span>
    </div>
    <div>
      <label for="password">密码</label>
      <input 
        :class="{ invalid: errors.password }"
        type="password" 
        id="password" 
        v-model="form.password"
        @blur="validatePassword"
        @input="validatePassword"
      >
      <span class="error" v-if="errors.password">{{ errors.password }}</span>
    </div>
    <button type="submit">登录</button>
  </form>
</template>

<script setup>
import { reactive } from 'vue';

const form = reactive({
  username: '',
  password: ''
});

const errors = reactive({
  username: '',
  password: ''
});

const validateUsername = () => {
  if (!form.username.trim()) {
    errors.username = '用户名不能为空';
    return false;
  }
  errors.username = '';
  return true;
};

const validatePassword = () => {
  if (!form.password) {
    errors.password = '密码不能为空';
    return false;
  }
  if (form.password.length < 6) {
    errors.password = '密码长度至少6位';
    return false;
  }
  errors.password = '';
  return true;
};

const handleSubmit = () => {
  const isValid = [validateUsername(), validatePassword()].every(Boolean);
  if (!isValid) return;
  alert(`欢迎, ${form.username}!`);
};
</script>

<style scoped>
.error {
  color: red;
  font-size: 0.8em;
}
input.invalid {
  border-color: red;
}
</style>

vue实现简单登录验证

标签: 简单vue
分享给朋友:

相关文章

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const tr…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-ligh…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@l…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导…