
离线 TA的专栏
- 打卡等级:无名新人
- 打卡总天数:1
- 打卡月天数:0
- 打卡总奖励:15
- 最近打卡:2025-02-12 07:08:06
|
一、效果
二、实现步骤
1.导入必要的组件和工具:
- 使用语句导入Vue3的、,Element Plus的类型,以及自定义的接口和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.初始化数据:
- 创建实例,用于存储用户名和密码。
- 创建实例,用于引用表单实例。
- 创建实例,定义表单验证规则,如用户名和密码的长度、格式等。
- 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 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.自定义校验函数:
- 定义函数,接收表单实例作为参数。
- 在函数内部,首先调用方法对表单进行验证。如果验证通过,调用登录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这个方法在编辑或者修改的时候会出现问题 '重置为初始值',修改过后初始值依旧在但是可以移除校验效果,想要到达真正的清空表单可以使用 watch监听重新把表单对象赋值为空对象。 - watch(() => {
- return open.value
- }, () => {
- if (!open.value) {
- form.value = {}
- }
- })
复制代码 四、单词意思
prop | 在使用了 validate、resetFields 的方法时,该属性是必填的。 | required | 是否为必填项。 | message | 报错提示消息。 | trigger | 验证逻辑的触发方式 ----'blur' | 'change' | blur | 失去焦点时进行验证 | change | 当值发生变化时进行验证 | pattern | 正则表达式,该值必须匹配才能通过验证
|
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|