vue element實(shí)現(xiàn)多個(gè)Formt表單同時(shí)驗(yàn)證
vue element多個(gè)Formt表單同時(shí)驗(yàn)證
多個(gè)Form內(nèi)容統(tǒng)一提交驗(yàn)證
<el-form ref="form1"></el-form> <el-form ref="form2"></el-form> <el-form ref="form3"></el-form> <el-form ref="form4"></el-form> export default{ data(){ resultArr:[],//接受驗(yàn)證返回結(jié)果數(shù)組 formArr:['form1','form2','form3','form4'],//存放表單ref數(shù)組 }, methods:{ //封裝驗(yàn)證函數(shù) checkForm(formName){ let _self=this; _self.resultArr = [] let result = new Promise(function(resolve, reject) { _self.$refs[formName].validate((valid) => { if (valid) { resolve(); } else { reject() } }) }) _self.resultArr.push(result) //push 得到promise的結(jié)果 }, submit(){ let _self=this; _self.formArr.forEach(item => { //根據(jù)表單的ref校驗(yàn) _self.checkForm(item) }) //resultArr數(shù)組的值必須是promise對(duì)象才能使用Promise.all,在checkForm做了這一步 Promise.all(_self.resultArr).then(function() { //都通過(guò)了 alert('所有表單驗(yàn)證通過(guò)') // 該區(qū)域使用this無(wú)效,promise內(nèi)面的this表示局部,并不代表VueComponet實(shí)例 }).catch(function() { console.log("err"); }); } } }
vue多個(gè)表單校驗(yàn) (巧用new promise)
場(chǎng)景
同一個(gè)頁(yè)面有多個(gè)模塊,每個(gè)模板又單獨(dú)使用了一個(gè)表單
組件,那么我們?cè)邳c(diǎn)擊提交按鈕
時(shí)如何同時(shí)校驗(yàn)多個(gè)表單,我們可以使用Promise
方案
- 1、子組件
子組件:return 出當(dāng)前的表單的數(shù)據(jù)
onSubmit() { let _self=this return new Promise((resolve, reject) =>{ _self.$refs.form.validate(valid => { if (valid) { // 檢驗(yàn)成功 傳當(dāng)前表單的數(shù)據(jù) resolve({0:_self.form}) } else { this.$message.error('員工自選-清單需求,請(qǐng)按要求填寫(xiě)') reject() } }) }) },
- 2、父組件
<!-- 方案需求 --> <div v-show="active === 2"> <FormEmployeeList ref="Form0"></FormEmployeeList> <FormEmployeeGift ref="Form1"></FormEmployeeGift> <FormEmployeeCustomization ref="Form2"></FormEmployeeCustomization> <FormEnterprisesList ref="Form3"></FormEnterprisesList> <FormEnterprisesGift ref="Form4"></FormEnterprisesGift> <FormEnterprisesCustomization ref="Form5"></FormEnterprisesCustomization> </div>
父組件:onSubmit時(shí),調(diào)用子組件的onSubmit方法,接受promise的返回結(jié)果,再通過(guò)Promise.all()方法一一驗(yàn)證
onSubmit() { let newArr = [] //承接promise的返回結(jié)果 for (let v = 0; v < 6; v ++) { let res =this.$refs['Form' + v].onSubmit() newArr.push(res) } Promise.all(newArr).then(res => { //都通過(guò)了 console.log('res',res) //res是數(shù)組,需轉(zhuǎn)對(duì)象 let obj = Object.assign({},...res) this.form = obj console.log('大功告成',this.form) }).catch(err=> { console.log('err',err) }) },
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于 Vue.js 之 iView UI 框架非工程化實(shí)踐記錄(推薦)
為了快速體驗(yàn) MVVM 模式,我選擇了非工程化方式來(lái)起步,并選擇使用 Vue.js,以及基于它構(gòu)建的 iView UI 框架。本文給大家分享基于 Vue.js 之 iView UI 框架非工程化實(shí)踐記錄,需要的朋友參考下吧2017-11-11利用vue3自己實(shí)現(xiàn)計(jì)數(shù)功能組件封裝實(shí)例
組件(Component) 是Vue.js最強(qiáng)大的功能之一,組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼,這篇文章主要給大家介紹了關(guān)于利用vue3自己實(shí)現(xiàn)計(jì)數(shù)功能組件封裝的相關(guān)資料,需要的朋友可以參考下2021-09-09Vue使用lodop實(shí)現(xiàn)打印小結(jié)
這篇文章主要介紹了Vue使用lodop打印小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07vue3.x使用swiper實(shí)現(xiàn)卡片輪播
這篇文章主要為大家詳細(xì)介紹了vue3.x使用swiper實(shí)現(xiàn)卡片輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07使用vue-cli3+typescript的項(xiàng)目模板創(chuàng)建工程的教程
這篇文章主要介紹了使用vue-cli3+typescript的項(xiàng)目模板創(chuàng)建工程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02vue多功能渲染函數(shù)h()的使用和多種應(yīng)用場(chǎng)景
我們?cè)趘ue項(xiàng)目里面用HTML標(biāo)簽構(gòu)建頁(yè)面時(shí)最終會(huì)被轉(zhuǎn)化成vnode,而h()是直接創(chuàng)建vnode,因此h()能以一種更靈活的方式在各種各樣情景下構(gòu)建組件的渲染邏輯,并且能帶來(lái)性能方式的提升,本文介紹如何使用和列出具體的應(yīng)用場(chǎng)景,需要的朋友可以參考下2024-08-08Vue項(xiàng)目中ESlint規(guī)范示例代碼
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中ESlint規(guī)范的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07