vue element實現(xiàn)多個Formt表單同時驗證
vue element多個Formt表單同時驗證
多個Form內(nèi)容統(tǒng)一提交驗證
<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:[],//接受驗證返回結果數(shù)組
formArr:['form1','form2','form3','form4'],//存放表單ref數(shù)組
},
methods:{
//封裝驗證函數(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的結果
},
submit(){
let _self=this;
_self.formArr.forEach(item => { //根據(jù)表單的ref校驗
_self.checkForm(item)
})
//resultArr數(shù)組的值必須是promise對象才能使用Promise.all,在checkForm做了這一步
Promise.all(_self.resultArr).then(function() { //都通過了
alert('所有表單驗證通過')
// 該區(qū)域使用this無效,promise內(nèi)面的this表示局部,并不代表VueComponet實例
}).catch(function() {
console.log("err");
});
}
}
}
vue多個表單校驗 (巧用new promise)
場景
同一個頁面有多個模塊,每個模板又單獨使用了一個表單組件,那么我們在點擊提交按鈕時如何同時校驗多個表單,我們可以使用Promise

方案
- 1、子組件
子組件:return 出當前的表單的數(shù)據(jù)
onSubmit() {
let _self=this
return new Promise((resolve, reject) =>{
_self.$refs.form.validate(valid => {
if (valid) { // 檢驗成功 傳當前表單的數(shù)據(jù)
resolve({0:_self.form})
} else {
this.$message.error('員工自選-清單需求,請按要求填寫')
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時,調(diào)用子組件的onSubmit方法,接受promise的返回結果,再通過Promise.all()方法一一驗證
onSubmit() {
let newArr = [] //承接promise的返回結果
for (let v = 0; v < 6; v ++) {
let res =this.$refs['Form' + v].onSubmit()
newArr.push(res)
}
Promise.all(newArr).then(res => { //都通過了
console.log('res',res)
//res是數(shù)組,需轉(zhuǎn)對象
let obj = Object.assign({},...res)
this.form = obj
console.log('大功告成',this.form)
}).catch(err=> {
console.log('err',err)
})
},
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
利用Vue3實現(xiàn)一個可以用js調(diào)用的組件
最近遇到個功能要求,想要在全局中調(diào)用組件,而且要在某些js文件內(nèi)調(diào)用,所以這篇文章主要給大家介紹了關于如何利用Vue3實現(xiàn)一個可以用js調(diào)用的組件的相關資料,需要的朋友可以參考下2021-08-08
VUE使用vue?create命令創(chuàng)建vue2.0項目的全過程
vue-cli是創(chuàng)建Vue項目的一個腳手架工具,vue-cli提供了vue create等命令,下面這篇文章主要給大家介紹了關于VUE使用vue?create命令創(chuàng)建vue2.0項目的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-07-07
Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式
這篇文章主要介紹了Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Vue數(shù)據(jù)變了但頁面沒有變的幾種情況及解決方法
如果,你發(fā)現(xiàn)自己需要在Vue中做一次強制更新,99.99%的情況,是你在某個地方做錯了事,本文給大家就介紹了Vue數(shù)據(jù)變了,但頁面沒有變的幾種情況及解決方法,并通過代碼示例介紹的非常詳細,需要的朋友可以參考下2024-08-08
Vue3使用路由及配置vite.alias簡化導入寫法的過程詳解
這篇文章主要介紹了Vue3使用路由及配置vite.alias簡化導入寫法,本文通過實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖的代碼
徑向條形圖是一種用于可視化單一數(shù)據(jù)點及其與目標或理想值的關系的圖表類型,它在顯示進度、完成率或其他類似度量時非常有用,本文給大家介紹了使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖,感興趣的小伙伴可以參考閱讀下2024-06-06

