当前位置:首页 > 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创建响应式数据,验证逻辑应返回布尔值。

vue实现简单登录验证

<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事件实现边输入边验证,提升用户体验。注意避免频繁验证导致的性能问题,可考虑使用防抖。

vue实现简单登录验证

<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 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <templ…

vue实现阻塞

vue实现阻塞

Vue 实现阻塞的方法 在 Vue 中实现阻塞操作通常涉及异步控制、状态管理或生命周期钩子的使用。以下是几种常见方法: 使用 async/await 处理异步阻塞 通过 async/await 可…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…