当前位置:首页 > VUE

vue实现登录表单验证

2026-02-20 16:53:49VUE

表单结构设计

使用Vue的v-model双向绑定表单数据,结合<form>标签和@submit.prevent阻止默认提交行为。示例模板结构:

<template>
  <form @submit.prevent="handleSubmit">
    <div>
      <label>用户名</label>
      <input 
        v-model="form.username" 
        @blur="validate('username')"
      >
      <span v-if="errors.username">{{ errors.username }}</span>
    </div>

    <div>
      <label>密码</label>
      <input 
        type="password" 
        v-model="form.password"
        @blur="validate('password')"
      >
      <span v-if="errors.password">{{ errors.password }}</span>
    </div>

    <button type="submit">登录</button>
  </form>
</template>

数据与验证规则定义

datasetup中定义表单数据和验证规则。使用响应式对象存储错误信息:

vue实现登录表单验证

data() {
  return {
    form: {
      username: '',
      password: ''
    },
    errors: {
      username: '',
      password: ''
    },
    rules: {
      username: [
        { required: true, message: '用户名不能为空' },
        { min: 3, message: '用户名至少3个字符' }
      ],
      password: [
        { required: true, message: '密码不能为空' },
        { pattern: /^(?=.*[A-Za-z])(?=.*\d).{6,}$/, message: '需包含字母和数字且长度≥6' }
      ]
    }
  }
}

验证逻辑实现

创建验证方法,遍历规则数组进行逐项校验。对于复杂正则校验可使用test()方法:

methods: {
  validate(field) {
    const value = this.form[field]
    this.errors[field] = ''

    for (const rule of this.rules[field]) {
      if (rule.required && !value.trim()) {
        this.errors[field] = rule.message
        break
      }
      if (rule.min && value.length < rule.min) {
        this.errors[field] = rule.message
        break
      }
      if (rule.pattern && !rule.pattern.test(value)) {
        this.errors[field] = rule.message
        break
      }
    }
  },
  handleSubmit() {
    Object.keys(this.form).forEach(field => this.validate(field))
    const isValid = Object.values(this.errors).every(msg => !msg)
    if (isValid) {
      // 提交逻辑
    }
  }
}

实时验证优化

添加@input事件实现输入时实时验证,配合防抖提升性能:

vue实现登录表单验证

<input 
  v-model="form.username"
  @input="debounceValidate('username')"
>

methods: {
  debounceValidate: _.debounce(function(field) {
    this.validate(field)
  }, 500)
}

第三方库集成

推荐使用vee-validateelement-uiForm组件实现更复杂的验证:

// vee-validate示例
import { useField, useForm } from 'vee-validate'

const { handleSubmit } = useForm()
const { value: username, errorMessage: usernameError } = useField(
  'username',
  'required|min:3'
)

服务端验证反馈

处理API返回的验证错误,动态更新错误提示:

async handleSubmit() {
  try {
    await loginAPI(this.form)
  } catch (error) {
    if (error.response.status === 422) {
      this.errors = { ...this.errors, ...error.response.data.errors }
    }
  }
}

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

相关文章

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象,…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue网页实现

vue网页实现

Vue 网页实现指南 环境准备 安装 Node.js 和 npm/yarn,确保环境配置正确。使用 Vue CLI 或 Vite 创建项目框架,快速搭建开发环境。 npm install -g @v…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…