当前位置:首页 > 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 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些方…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通…

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…