Vue3 Element Plus表单自定义校验的实现全过程

 更新时间:2025年04月03日 10:22:47   作者:Roco Ethan  
这篇文章主要介绍了Vue3 Element Plus表单自定义校验的实现全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、效果

二、实现步骤

1.导入必要的组件和工具:

  • 使用import语句导入Vue3的refuseRouter,Element Plus的FormInstance类型,以及自定义的接口和API。
import { ref } from "vue";
import type { FormInstance } from 'element-plus'
import { useRouter } from "vue-router";
import { IUser2, IRules } from "@/interfaces/userInterface";
import { loginApi } from "@/apis/userApi";
import { User, Lock } from "@element-plus/icons-vue";

2.初始化数据

  • 创建ref实例user2,用于存储用户名和密码。
  • 创建ref实例ruleFormRef,用于引用表单实例。
  • 创建ref实例rules,定义表单验证规则,如用户名和密码的长度、格式等。
const $router = useRouter();
const user2 = ref<IUser2>({ account: "", password: "" });
const ruleFormRef = ref<FormInstance>()
const rules = ref<IRules>({
  account: [
    { required: true, message: "请输入用户名", trigger: "blur" },
    { pattern: /^[a-zA-Z0-9]{4,10}$/, message: "用户名包含数字和字母大小写4~10位", trigger: "blur" },
  ],
  password: [
    { required: true, message: "请输入密码", trigger: "blur" },
    { pattern: /^[a-zA-Z0-9!@#$%^&*(),._-]{6,12}$/, message: "密码包含数字和字母大小写,特殊字符6~12位", trigger: "blur" }
  ]
})

3.HTML模板

  • 使用el-form组件,设置refruleFormRefmodeluser2rulesrules
  • el-form-item中使用el-input组件,结合v-model双向绑定数据,并设置prop属性与rules中的属性相对应,用于自动验证。
<el-form class="login_form" ref="ruleFormRef" :model="user2" :rules="rules">
   <h1>Hello</h1>
   <h2>欢迎来到白宫甄选</h2>
   <el-form-item class="login_item" prop="account">
       <el-input :prefix-icon="User" placeholder="请输入用户名" v-model="user2.account"> 
       </el-input>
   </el-form-item>
   <el-form-item class="login_item" prop="password">
      <el-input type="password" placeholder="请输入密码" :prefix-icon="Lock"                                   
        v-model="user2.password" show-password></el-input>
   </el-form-item>
   <el-form-item class="login_item">
      <el-button class="login_btn" type="primary" @click="submitForm(ruleFormRef)">登陆 
      </el-button>
   </el-form-item>
</el-form>

4.自定义校验函数

  • 定义submitForm函数,接收表单实例作为参数。
  • 在函数内部,首先调用validate方法对表单进行验证。如果验证通过,调用登录API并处理返回结果。如果验证失败,显示错误通知。
const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return// 如果未定义表单实例,则直接返回,不执行后续操作

  // 验证表单,如果验证通过则调用登录接口
  formEl.validate(async(valid) => {
    if (valid) {
      // 调用登录接口并传入用户信息
      const res = await loginApi(user2.value);
      console.log(res);
      
      // 根据接口返回结果进行相应操作
      if (res.data.code !== 1) {
        ElNotification({
          title: '登陆失败',
          message: '用户名或密码错误',
          type: 'error',
        })
      } else {
        // 登录成功,存储token并跳转到首页
        localStorage.setItem("token", res.data.data.token);
        $router.push("/home");
        ElNotification({
          title: '登陆成功',
          message: '欢迎回来',
          type: 'success',
        })
      }
    } else {
      // 验证未通过,显示错误通知
      ElNotification({
          title: '校验',
          message: '请输入用户名和账号',
          type: 'error',
        })
    }
  })
}

三、重置该表单项并移除校验结果

  • resetFields

resetFields这个方法在编辑或者修改的时候会出现问题 '重置为初始值',修改过后初始值依旧在但是可以移除校验效果,想要到达真正的清空表单可以使用watch监听重新把表单对象赋值为空对象。

watch(() => {
    return open.value
}, () => {
    if (!open.value) {
        form.value = {}
    }
})

四、单词意思

prop在使用了 validate、resetFields 的方法时,该属性是必填的。
required是否为必填项。
message报错提示消息。
trigger验证逻辑的触发方式 ----'blur' | 'change'
blur失去焦点时进行验证
change当值发生变化时进行验证
pattern

正则表达式,该值必须匹配才能通过验证

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈vue获得后台数据无法显示到table上面的坑

    浅谈vue获得后台数据无法显示到table上面的坑

    这篇文章主要介绍了浅谈vue获得后台数据无法显示到table上面的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue-cli的index.html中使用环境变量方式

    vue-cli的index.html中使用环境变量方式

    这篇文章主要介绍了vue-cli的index.html中使用环境变量方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue项目每次发版后要清理浏览器缓存问题解决办法

    Vue项目每次发版后要清理浏览器缓存问题解决办法

    最近项目更新频繁,每次一更新客户都说还跟之前的一样,一查原因是因为客户没有清空浏览器的缓存,所以为了方便客户看到最新版本,开始调研再发布新版本后自动清理缓存,这篇文章主要给大家介绍了关于Vue项目每次发版后要清理浏览器缓存问题的解决办法,需要的朋友可以参考下
    2024-02-02
  • 通过Element ui往页面上加一个分页导航条的方法

    通过Element ui往页面上加一个分页导航条的方法

    这篇文章主要介绍了通过Element ui往页面上加一个分页导航条的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • vue依赖包报错问题eslint\lib\cli-engine\cli-engine.js:421

    vue依赖包报错问题eslint\lib\cli-engine\cli-engine.js:421

    这篇文章主要介绍了vue依赖包报错问题eslint\lib\cli-engine\cli-engine.js:421,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue3目录调整方案详解

    Vue3目录调整方案详解

    默认生成的目录结构不满足我们的开发需求,所以这里需要做一些自定义改动,本文给大家分享Vue3目录调整方案,感兴趣的朋友一起看看吧
    2023-11-11
  • Vue使用iframe实现浏览器打印兼容性优化

    Vue使用iframe实现浏览器打印兼容性优化

    在前端开发中,打印功能是一个常见的需求,但不同浏览器对打印样式的支持差异较大,本文我们来看看Vue如何使用iframe实现浏览器打印兼容性优化吧
    2025-04-04
  • vue首次赋值不触发watch的解决方法

    vue首次赋值不触发watch的解决方法

    今天小编就为大家分享一篇vue首次赋值不触发watch的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue中引用JSON数据的方法小结

    Vue中引用JSON数据的方法小结

    在现代Web开发中,JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,Vue.js作为一个流行的前端框架,支持多种方式引入和处理JSON数据,本文将详细介绍几种在Vue中引用JSON数据的方法,需要的朋友可以参考下
    2024-10-10
  • vue ElementUI级联选择器回显问题解决

    vue ElementUI级联选择器回显问题解决

    这篇文章主要介绍了vue ElementUI级联选择器回显问题解决,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论