element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),單個(gè)表單檢驗(yàn)可查看element的官網(wǎng)文檔,里面有詳細(xì)的介紹。在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,歡迎大家留言,一起探討相關(guān)技術(shù),請(qǐng)多多指教。

這里主要用到 Promise 來(lái)解決。
關(guān)于Promise方法舉個(gè)例子來(lái)抽象理解:
周末想吃火鍋,打電話告訴小A,過(guò)來(lái)我這打火鍋,菜都齊了,就差點(diǎn)海鮮,你來(lái)的時(shí)候帶點(diǎn)。接著打電話找朋友小B,過(guò)來(lái)我這打火鍋,有海鮮,肉少了點(diǎn),你來(lái)的時(shí)候帶點(diǎn)。在接著打電話找朋友小C:過(guò)來(lái)我這打火鍋,啥菜都有了,差點(diǎn)酒,你來(lái)的時(shí)候整幾瓶。還差一包火鍋底料,拿手機(jī)打電話,小D啊,來(lái)打活個(gè),咋幾個(gè)都在,我這電爐不太行了,啥都準(zhǔn)備好了,你把電爐帶過(guò)來(lái),順便帶包底料。
吃火鍋這個(gè)事就成了,美滋滋。
但這個(gè)事吧。總不會(huì)一直順利,總有人來(lái)不了對(duì)吧,來(lái)不了這火鍋就吃不成了。
其實(shí)多個(gè)表單驗(yàn)證,就和這差不多,每個(gè)表單都詢問(wèn)一遍,如果大家都通過(guò)了,美滋滋,假如其中一個(gè)驗(yàn)證失敗,那對(duì)不起,還得告訴用戶,填對(duì)了再說(shuō)。
通過(guò)Promise,對(duì)每個(gè)表單執(zhí)行詢問(wèn)檢測(cè),無(wú)論結(jié)果如果,先進(jìn)入Promise.all中,等待所有表單詢問(wèn)完畢,如果大家就可以,就觸發(fā)then,美滋滋。反之,catch中執(zhí)行失敗響應(yīng)就ok了。
const formName = ['tableForm1', 'tableForm2', 'tableForm3']
const validates = (item) => {
return new Promise((resolve, reject) => {
if (!this.$refs[item]) {
resolve()
return false
}
this.$refs[item].validate((valid) => {
if (valid) {
resolve()
} else {
reject(new Error('驗(yàn)證不對(duì)'))
}
})
})
}
Promise.all(formName.map(item => validates(item))).then(() => {
console.log('成功')
}).catch(() => {
console.log('失敗')
})
}
}
最后,在這里貼上完整代碼:
<div class="home">
<el-form :model="tableForm1" ref="tableForm1" :rules="rules1" label-width="100px" >
<el-form-item label="價(jià)格" prop="price">
<el-input v-model.number="tableForm1.price" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-form :model="tableForm2" ref="tableForm2" :rules="rules2" label-width="100px" >
<el-form-item label="年齡" prop="age">
<el-input v-model.number="tableForm2.age" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-form :model="tableForm3" ref="tableForm3" :rules="rules3" label-width="100px" >
<el-form-item label="姓名" prop="name">
<el-input v-model.number="tableForm3.name" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</div>
</template>
<script>
export default {
name: 'Home',
data () {
return {
tableForm1: {
price: ''
},
tableForm2: {
age: ''
},
tableForm3: {
name: ''
},
rules1: {
price: [{ required: true, message: '價(jià)格不能為空', trigger: 'blur' }]
},
rules2: {
age: [{ required: true, message: '年齡不能為空', trigger: 'blur' }]
},
rules3: {
name: [{ required: true, message: '姓名不能為空', trigger: 'blur' }]
}
}
},
methods: {
resetForm () {
this.$refs.tableForm1.resetFields()
this.$refs.tableForm2.resetFields()
this.$refs.tableForm3.resetFields()
},
submitForm () {
const formName = ['tableForm1', 'tableForm2', 'tableForm3']
const validates = (item) => {
return new Promise((resolve, reject) => {
if (!this.$refs[item]) {
resolve()
return false
}
this.$refs[item].validate((valid) => {
if (valid) {
resolve()
} else {
reject(new Error('驗(yàn)證不對(duì)'))
}
})
})
}
Promise.all(formName.map(item => validates(item))).then(() => {
console.log('成功')
}).catch(() => {
console.log('失敗')
})
}
}
}
</script>
到此這篇關(guān)于element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)element 表單校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)表單的校驗(yàn)功能(根據(jù)條件動(dòng)態(tài)切換校驗(yàn)格式)
- 詳解element-ui 表單校驗(yàn) Rules 配置 常用黑科技
- Vue ElementUi同時(shí)校驗(yàn)多個(gè)表單(巧用new promise)
- element表單驗(yàn)證如何清除校驗(yàn)提示語(yǔ)
- vue elementUI 表單校驗(yàn)功能之?dāng)?shù)組多層嵌套
- Vue?elementUI表單嵌套表格并對(duì)每行進(jìn)行校驗(yàn)詳解
- element form 校驗(yàn)數(shù)組每一項(xiàng)實(shí)例代碼
- 詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額)
- element中el-table中的el-input校驗(yàn)的實(shí)現(xiàn)
相關(guān)文章
vue使用自定義指令實(shí)現(xiàn)一鍵復(fù)制功能
在Vue中,通過(guò)自定義指令v-copy和document.execCommand方法,可以實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪貼板的功能,適用于處理長(zhǎng)文本或多行文本的復(fù)制需求,而readonly屬性可避免內(nèi)容被修改和移動(dòng)設(shè)備上的虛擬鍵盤(pán)干擾,感興趣的朋友一起看看吧2024-09-09
Vue使用v-viewer插件實(shí)現(xiàn)圖片預(yù)覽和縮放和旋轉(zhuǎn)等功能(推薦)
v-viewer是一個(gè)基于viewerjs封裝的vue圖片預(yù)覽組件,有預(yù)覽縮放拉伸旋轉(zhuǎn)切換拖拽等功能,支持配置化,這篇文章主要介紹了Vue使用v-viewer插件實(shí)現(xiàn)圖片預(yù)覽和縮放和旋轉(zhuǎn)等功能,需要的朋友可以參考下2023-02-02
vue等兩個(gè)接口都返回結(jié)果再執(zhí)行下一步的實(shí)例
這篇文章主要介紹了vue等兩個(gè)接口都返回結(jié)果再執(zhí)行下一步的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
vue如何點(diǎn)擊多個(gè)tab標(biāo)簽打開(kāi)關(guān)閉多個(gè)頁(yè)面
這篇文章主要介紹了vue如何點(diǎn)擊多個(gè)tab標(biāo)簽打開(kāi)關(guān)閉多個(gè)頁(yè)面,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
淺談Vue.js之初始化el以及數(shù)據(jù)的綁定說(shuō)明
今天小編就為大家分享一篇淺談Vue.js之初始化el以及數(shù)據(jù)的綁定說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
如何在Vue3和Vite項(xiàng)目中用SQLite數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)
SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),是一個(gè)零配置、無(wú)服務(wù)器的、自給自足的、事務(wù)性的SQL數(shù)據(jù)庫(kù)引擎,這篇文章主要給大家介紹了關(guān)于如何在Vue3和Vite項(xiàng)目中用SQLite數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)的相關(guān)資料,需要的朋友可以參考下2024-03-03
Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件
隨著前端工程化的不斷推進(jìn),傳統(tǒng)的HTML、CSS、JavaScript三者分離的開(kāi)發(fā)模式逐漸顯露出一些不足之處,尤其是在構(gòu)建復(fù)雜的單頁(yè)應(yīng)用(SPA)時(shí),Vue.js作為一個(gè)現(xiàn)代化的前端框架,提供了多種工具和技術(shù)來(lái)簡(jiǎn)化開(kāi)發(fā)流程,本文將探討.vue文件是如何替代傳統(tǒng)HTML文件的角色2024-10-10

