Vue3 Element Plus表單自定義校驗(yàn)的實(shí)現(xiàn)全過(guò)程
一、效果
二、實(shí)現(xiàn)步驟
1.導(dǎo)入必要的組件和工具:
- 使用
import
語(yǔ)句導(dǎo)入Vue3的ref
、useRouter
,Element Plus的FormInstance
類(lèi)型,以及自定義的接口和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.初始化數(shù)據(jù):
- 創(chuàng)建
ref
實(shí)例user2
,用于存儲(chǔ)用戶名和密碼。 - 創(chuàng)建
ref
實(shí)例ruleFormRef
,用于引用表單實(shí)例。 - 創(chuàng)建
ref
實(shí)例rules
,定義表單驗(yàn)證規(guī)則,如用戶名和密碼的長(zhǎng)度、格式等。
const $router = useRouter(); const user2 = ref<IUser2>({ account: "", password: "" }); const ruleFormRef = ref<FormInstance>() const rules = ref<IRules>({ account: [ { required: true, message: "請(qǐng)輸入用戶名", trigger: "blur" }, { pattern: /^[a-zA-Z0-9]{4,10}$/, message: "用戶名包含數(shù)字和字母大小寫(xiě)4~10位", trigger: "blur" }, ], password: [ { required: true, message: "請(qǐng)輸入密碼", trigger: "blur" }, { pattern: /^[a-zA-Z0-9!@#$%^&*(),._-]{6,12}$/, message: "密碼包含數(shù)字和字母大小寫(xiě),特殊字符6~12位", trigger: "blur" } ] })
3.HTML模板:
- 使用
el-form
組件,設(shè)置ref
為ruleFormRef
,model
為user2
,rules
為rules
。 - 在
el-form-item
中使用el-input
組件,結(jié)合v-model
雙向綁定數(shù)據(jù),并設(shè)置prop
屬性與rules
中的屬性相對(duì)應(yīng),用于自動(dòng)驗(yàn)證。
<el-form class="login_form" ref="ruleFormRef" :model="user2" :rules="rules"> <h1>Hello</h1> <h2>歡迎來(lái)到白宮甄選</h2> <el-form-item class="login_item" prop="account"> <el-input :prefix-icon="User" placeholder="請(qǐng)輸入用戶名" v-model="user2.account"> </el-input> </el-form-item> <el-form-item class="login_item" prop="password"> <el-input type="password" placeholder="請(qǐng)輸入密碼" :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.自定義校驗(yàn)函數(shù):
- 定義
submitForm
函數(shù),接收表單實(shí)例作為參數(shù)。 - 在函數(shù)內(nèi)部,首先調(diào)用
validate
方法對(duì)表單進(jìn)行驗(yàn)證。如果驗(yàn)證通過(guò),調(diào)用登錄API并處理返回結(jié)果。如果驗(yàn)證失敗,顯示錯(cuò)誤通知。
const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return// 如果未定義表單實(shí)例,則直接返回,不執(zhí)行后續(xù)操作 // 驗(yàn)證表單,如果驗(yàn)證通過(guò)則調(diào)用登錄接口 formEl.validate(async(valid) => { if (valid) { // 調(diào)用登錄接口并傳入用戶信息 const res = await loginApi(user2.value); console.log(res); // 根據(jù)接口返回結(jié)果進(jìn)行相應(yīng)操作 if (res.data.code !== 1) { ElNotification({ title: '登陸失敗', message: '用戶名或密碼錯(cuò)誤', type: 'error', }) } else { // 登錄成功,存儲(chǔ)token并跳轉(zhuǎn)到首頁(yè) localStorage.setItem("token", res.data.data.token); $router.push("/home"); ElNotification({ title: '登陸成功', message: '歡迎回來(lái)', type: 'success', }) } } else { // 驗(yàn)證未通過(guò),顯示錯(cuò)誤通知 ElNotification({ title: '校驗(yàn)', message: '請(qǐng)輸入用戶名和賬號(hào)', type: 'error', }) } }) }
三、重置該表單項(xiàng)并移除校驗(yàn)結(jié)果
resetFields
:
resetFields這個(gè)方法在編輯或者修改的時(shí)候會(huì)出現(xiàn)問(wèn)題 '重置為初始值',修改過(guò)后初始值依舊在但是可以移除校驗(yàn)效果,想要到達(dá)真正的清空表單可以使用watch監(jiān)聽(tīng)重新把表單對(duì)象賦值為空對(duì)象。
watch(() => { return open.value }, () => { if (!open.value) { form.value = {} } })
四、單詞意思
prop | 在使用了 validate、resetFields 的方法時(shí),該屬性是必填的。 |
required | 是否為必填項(xiàng)。 |
message | 報(bào)錯(cuò)提示消息。 |
trigger | 驗(yàn)證邏輯的觸發(fā)方式 ----'blur' | 'change' |
blur | 失去焦點(diǎn)時(shí)進(jìn)行驗(yàn)證 |
change | 當(dāng)值發(fā)生變化時(shí)進(jìn)行驗(yàn)證 |
pattern | 正則表達(dá)式,該值必須匹配才能通過(guò)驗(yàn)證 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 基于Vue3+Element Plus 實(shí)現(xiàn)多表單校驗(yàn)demo
- vue3+elementPlus?table中添加輸入框并提交校驗(yàn)
- vue3中element-plus表格搜索過(guò)濾數(shù)據(jù)
- Vue3+Element Plus進(jìn)行圖片加載優(yōu)化全攻略
- Vue3集成Element-plus快速搭建頁(yè)面框架的過(guò)程
- Vue3 + Element Plus 實(shí)現(xiàn)表格全選/反選/禁用功能(示例詳解)
- 基于Vue3和Element Plus實(shí)現(xiàn)自動(dòng)導(dǎo)入功能
相關(guān)文章
淺談vue獲得后臺(tái)數(shù)據(jù)無(wú)法顯示到table上面的坑
這篇文章主要介紹了淺談vue獲得后臺(tái)數(shù)據(jù)無(wú)法顯示到table上面的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08vue-cli的index.html中使用環(huán)境變量方式
這篇文章主要介紹了vue-cli的index.html中使用環(huán)境變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題解決辦法
最近項(xiàng)目更新頻繁,每次一更新客戶都說(shuō)還跟之前的一樣,一查原因是因?yàn)榭蛻魶](méi)有清空瀏覽器的緩存,所以為了方便客戶看到最新版本,開(kāi)始調(diào)研再發(fā)布新版本后自動(dòng)清理緩存,這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題的解決辦法,需要的朋友可以參考下2024-02-02通過(guò)Element ui往頁(yè)面上加一個(gè)分頁(yè)導(dǎo)航條的方法
這篇文章主要介紹了通過(guò)Element ui往頁(yè)面上加一個(gè)分頁(yè)導(dǎo)航條的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05vue依賴(lài)包報(bào)錯(cuò)問(wèn)題eslint\lib\cli-engine\cli-engine.js:421
這篇文章主要介紹了vue依賴(lài)包報(bào)錯(cuò)問(wèn)題eslint\lib\cli-engine\cli-engine.js:421,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Vue使用iframe實(shí)現(xiàn)瀏覽器打印兼容性?xún)?yōu)化
在前端開(kāi)發(fā)中,打印功能是一個(gè)常見(jiàn)的需求,但不同瀏覽器對(duì)打印樣式的支持差異較大,本文我們來(lái)看看Vue如何使用iframe實(shí)現(xiàn)瀏覽器打印兼容性?xún)?yōu)化吧2025-04-04Vue中引用JSON數(shù)據(jù)的方法小結(jié)
在現(xiàn)代Web開(kāi)發(fā)中,JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,Vue.js作為一個(gè)流行的前端框架,支持多種方式引入和處理JSON數(shù)據(jù),本文將詳細(xì)介紹幾種在Vue中引用JSON數(shù)據(jù)的方法,需要的朋友可以參考下2024-10-10vue?ElementUI級(jí)聯(lián)選擇器回顯問(wèn)題解決
這篇文章主要介紹了vue?ElementUI級(jí)聯(lián)選擇器回顯問(wèn)題解決,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09