vue動(dòng)態(tài)綁定組件子父組件多表單驗(yàn)證功能的實(shí)現(xiàn)代碼
前端項(xiàng)目中經(jīng)常會(huì)下拉或者選項(xiàng)卡,如果通過if,else或者switch去判斷加載的話會(huì)產(chǎn)生大量冗余代碼和變量定義,而且都寫在一起后人很難維護(hù)。
Vue核心在于組件,如果有內(nèi)容通過選項(xiàng)卡或者下拉框切換用動(dòng)態(tài)加載子組件最好不過。
如圖: selects文件夾中,index只負(fù)責(zé)公共數(shù)據(jù)(當(dāng)然公共數(shù)據(jù)也可以寫在其他文件,只留一個(gè)入口文件),而comp文件夾中的幾個(gè)組件則通過動(dòng)態(tài)加載。
動(dòng)態(tài)加載子組件:component
// 給下拉框綁定下拉列表的索引 <el-select v-model="value" placeholder="請(qǐng)選擇" style="float:left" @change="selectNum(value)"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select>
引入組件后放到一個(gè)數(shù)組內(nèi),通過控制對(duì)應(yīng)的索引達(dá)到加載組件的目的
// 加載組件:每次下拉框監(jiān)聽則給changValue新賦值,如果下拉options的value從0開始則綁定組件時(shí)不用-1 <component :is="componentName[changValue - 1]" ref="subjectChild" @isSubmit="getSubmit"></component>
子父組件表單一起驗(yàn)證:
按鈕放在父組件內(nèi):
子組件:自定義驗(yàn)證規(guī)則
data(){ const num = (rule, value, callback) => { let num = /^\d+$/ if(!value){ return callback(new Error('數(shù)量不能為空')) }else if(!num.test(value)){ return callback(new Error('數(shù)量必須為數(shù)字')) }else{ callback() } } const price = (rule, value, callback) => { let num2 = /^\d+$/ if(!value){ return callback(new Error('單價(jià)不能為空')) }else if(!num2.test(value)){ return callback(new Error('單價(jià)必須為數(shù)字')) }else{ callback() } } return{ // 驗(yàn)證 apple:{ num: '', price: '', }, reg:{ num: [ { validator: num, trigger: 'blur' } ], price: [ { validator: price, trigger: 'blur' } ] } } // 驗(yàn)證 submitForm(){ this.$refs.apple.validate((valid) => { if(valid){ this.$emit('isSubmit',["subject",true]) }else{ this.$emit('isSubmit',["subject",false]) return false } }) }
父組件:
// 獲取子組件狀態(tài) getSubmit(type){ this.isRule = type[1] }, // 公共數(shù)據(jù)驗(yàn)證 submitForm2(){ // 如果選中了子組件 if(this.changValue){ this.$refs.subjectChild.submitForm() } let _this = this let p1 = new Promise((resolve, reject) => { _this.$refs.ruleForm.validate((valid) => { if(valid){ resolve() } }) }) if(_this.isRule){ Promise.all([p1]).then(() => { console.log('正確') }) .catch(() => { console.log('錯(cuò)誤') }) }else{ console.log('錯(cuò)誤') } },
總結(jié)
以上所述是小編給大家介紹的vue動(dòng)態(tài)綁定組件子父組件多表單驗(yàn)證功能的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- vue使用Element組件時(shí)v-for循環(huán)里的表單項(xiàng)驗(yàn)證方法
- Vue2.0表單校驗(yàn)組件vee-validate的使用詳解
- vue組件表單數(shù)據(jù)回顯驗(yàn)證及提交的實(shí)例代碼
- Vue表單類的父子組件數(shù)據(jù)傳遞示例
- 詳解vue表單驗(yàn)證組件 v-verify-plugin
- Vue form表單動(dòng)態(tài)添加組件實(shí)戰(zhàn)案例
- 使用form-create動(dòng)態(tài)生成vue自定義組件和嵌套表單組件
- vue2.0數(shù)據(jù)雙向綁定與表單bootstrap+vue組件
- 利用Vue v-model實(shí)現(xiàn)一個(gè)自定義的表單組件
- vue懸浮表單復(fù)合組件開發(fā)詳解
相關(guān)文章
vue axios數(shù)據(jù)請(qǐng)求get、post方法及實(shí)例詳解
axios是一個(gè)基于Promise,同時(shí)支持瀏覽器端和Node.js的HTTP庫(kù),常用于Ajax請(qǐng)求。這篇文章主要介紹了vue axios數(shù)據(jù)請(qǐng)求get、post方法的使用 ,需要的朋友可以參考下2018-09-09Vue點(diǎn)擊在彈窗外部實(shí)現(xiàn)一鍵關(guān)閉的示例代碼
在Vue應(yīng)用中,彈窗是一個(gè)常見的交互元素,有時(shí)我們可能希望用戶點(diǎn)擊彈窗外部時(shí),彈窗能夠自動(dòng)關(guān)閉,本文主要介紹了Vue點(diǎn)擊在彈窗外部實(shí)現(xiàn)一鍵關(guān)閉的示例代碼,感興趣的可以了解一下2024-06-06Element-Plus?el-col、el-row快速布局及使用方法
這篇文章主要介紹了Element-Plus?el-col、el-row快速布局及使用方法,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12