设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间11 现在时间11 缓存数据 "如果你喜欢一个人, 一定要告诉她 不是为了要她报答, 而是让她在以后黑暗的日子里, 否定自己的时候, 想起世界上还有人这么喜欢她 她并非一无是处。"

"如果你喜欢一个人, 一定要告诉她 不是为了要她报答, 而是让她在以后黑暗的日子里, 否定自己的时候, 想起世界上还有人这么喜欢她 她并非一无是处。" -- 感谢你曾来过

查看: 796|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:15
  • 最近打卡:2025-02-12 07:08:06
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
39
主题
35
精华
0
金钱
138
积分
78
注册时间
2023-9-30
最后登录
2025-6-1

发表于 2025-5-31 05:30:02 | 显示全部楼层 |阅读模式
一、效果

1.png


二、实现步骤

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

  • 使用
    1. import
    复制代码
    语句导入Vue3的
    1. ref
    复制代码
    1. useRouter
    复制代码
    ,Element Plus的
    1. FormInstance
    复制代码
    类型,以及自定义的接口和API。
  1. import { ref } from "vue";
  2. import type { FormInstance } from 'element-plus'
  3. import { useRouter } from "vue-router";
  4. import { IUser2, IRules } from "@/interfaces/userInterface";
  5. import { loginApi } from "@/apis/userApi";
  6. import { User, Lock } from "@element-plus/icons-vue";
复制代码
2.初始化数据

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

  • 使用
    1. el-form
    复制代码
    组件,设置
    1. ref
    复制代码
    1. ruleFormRef
    复制代码
    1. model
    复制代码
    1. user2
    复制代码
    1. rules
    复制代码
    1. rules
    复制代码

    1. el-form-item
    复制代码
    中使用
    1. el-input
    复制代码
    组件,结合
    1. v-model
    复制代码
    双向绑定数据,并设置
    1. prop
    复制代码
    属性与
    1. rules
    复制代码
    中的属性相对应,用于自动验证。
  1. <el-form class="login_form" ref="ruleFormRef" :model="user2" :rules="rules">
  2.    <h1>Hello</h1>
  3.    <h2>欢迎来到白宫甄选</h2>
  4.    <el-form-item class="login_item" prop="account">
  5.        <el-input :prefix-icon="User" placeholder="请输入用户名" v-model="user2.account">
  6.        </el-input>
  7.    </el-form-item>
  8.    <el-form-item class="login_item" prop="password">
  9.       <el-input type="password" placeholder="请输入密码" :prefix-icon="Lock"                                   
  10.         v-model="user2.password" show-password></el-input>
  11.    </el-form-item>
  12.    <el-form-item class="login_item">
  13.       <el-button class="login_btn" type="primary" @click="submitForm(ruleFormRef)">登陆
  14.       </el-button>
  15.    </el-form-item>
  16. </el-form>
复制代码
4.自定义校验函数

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

  3.   // 验证表单,如果验证通过则调用登录接口
  4.   formEl.validate(async(valid) => {
  5.     if (valid) {
  6.       // 调用登录接口并传入用户信息
  7.       const res = await loginApi(user2.value);
  8.       console.log(res);
  9.       
  10.       // 根据接口返回结果进行相应操作
  11.       if (res.data.code !== 1) {
  12.         ElNotification({
  13.           title: '登陆失败',
  14.           message: '用户名或密码错误',
  15.           type: 'error',
  16.         })
  17.       } else {
  18.         // 登录成功,存储token并跳转到首页
  19.         localStorage.setItem("token", res.data.data.token);
  20.         $router.push("/home");
  21.         ElNotification({
  22.           title: '登陆成功',
  23.           message: '欢迎回来',
  24.           type: 'success',
  25.         })
  26.       }
  27.     } else {
  28.       // 验证未通过,显示错误通知
  29.       ElNotification({
  30.           title: '校验',
  31.           message: '请输入用户名和账号',
  32.           type: 'error',
  33.         })
  34.     }
  35.   })
  36. }
复制代码
三、重置该表单项并移除校验结果


    1. resetFields
    复制代码

resetFields这个方法在编辑或者修改的时候会出现问题 '重置为初始值',修改过后初始值依旧在但是可以移除校验效果,想要到达真正的清空表单可以使用watch监听重新把表单对象赋值为空对象。
  1. watch(() => {
  2.     return open.value
  3. }, () => {
  4.     if (!open.value) {
  5.         form.value = {}
  6.     }
  7. })
复制代码
四、单词意思

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表