vue3.0中使用element UI表單遍歷校驗(yàn)問(wèn)題解決
問(wèn)題
在使用vue3.0寫項(xiàng)目的時(shí)候遇到一個(gè)需要遍歷的表單,可以增加刪除表單對(duì)象
不考慮校驗(yàn)問(wèn)題的話,就是簡(jiǎn)單的數(shù)組包form對(duì)象。涉及校驗(yàn)的時(shí)候,按照以往的寫法就是綁定ref值,然后調(diào)用組件的validate方法【form表單中配置rule規(guī)則】。
解決方法就是將數(shù)組內(nèi)嵌在一個(gè)對(duì)象中,對(duì)象的結(jié)構(gòu)跟我們定義的form對(duì)象結(jié)構(gòu)一致
//我們需要遍歷的form對(duì)象數(shù)組 const arr = [ { name:'', sex:'', age:'', },{ name:'', sex:'', age:'', } ] //處理后的對(duì)象 const afterForm = { name:'', sex:'', age:'', child:arr,//這里的arr就是我們需要遍歷的數(shù)組【這個(gè)key值可以隨便取,不一定非得是‘child',盡量不要出現(xiàn)歧義就好】 }
然后就是html中的dom結(jié)構(gòu)寫法
<el-dialog v-model="addPageVisible" width="1000px" title="新增頁(yè)面參數(shù)配置" @closed="closeDialog"> <el-form :model="form" label-width="120px" :inline="true" ref="ruleFormRef" :rules="rules"> <el-card v-for="(item, index) in form.child" :key="index" shadow="hover" class="mb20"> <el-form-item label="頁(yè)面名稱:" :prop="`child[${index}].pageName`" :rules="rules.pageName"> <el-input v-model.trim="item.pageName" class="length-limit"></el-input> </el-form-item> <el-form-item label="頁(yè)面路由:" :prop="`child[${index}].routerName`" :rules="rules.routerName"> <el-input v-model.trim="item.routerName" class="length-limit"></el-input> </el-form-item> <el-form-item label="頁(yè)面類型:" :prop="`child[${index}].businessType`" :rules="rules.businessType"> <el-select v-model.trim="item.businessType" class="length-limit"> <el-option v-for="item in bussinessOptions" :value="item.value" :label="item.label" :key="item.value" ></el-option> </el-select> </el-form-item> <div class="pageManage__dialog-foot"> <el-button type="primary" round @click="addNewForm" v-if="index === allForm.length - 1" >新增配置表單</el-button > <el-button round :disabled="allForm.length === 1 && index === 0" @click="deleteForm(index)" >刪除表單</el-button > </div> </el-card> </el-form> <template #footer> <span class="dialog-footer"> <el-button round @click="addPageVisible = false">取 消</el-button> <el-button round type="primary" @click="submitNewPage">提交</el-button> </span> </template> </el-dialog> //這是我實(shí)際項(xiàng)目的頁(yè)面,所以定義的參數(shù)名可能不太一樣
寫法上跟一般的form表達(dá)差不多,只是我們el-form綁定的model值應(yīng)該是我們處理過(guò)的對(duì)象,主要有兩個(gè)地方需要注意
el-form-item上面綁定的prop值應(yīng)該寫成 :prop="child[${index}].pageName
",rules也要綁定到對(duì)應(yīng)的值。
const rules = reactive({ pageName: [{ required: true, message: '請(qǐng)輸入頁(yè)面名稱', trigger: 'blur' }], routerName: [{ required: true, message: '請(qǐng)輸入路由名稱', trigger: 'blur' }], businessType: [{ required: true, message: '請(qǐng)選擇頁(yè)面類型', trigger: 'change' }], })
考慮到我們需要用的數(shù)組會(huì)有數(shù)量變化,可以直接用computed計(jì)算屬性去得到處理后的數(shù)組
const form = computed(() => { return { pageName: 'string', routerName: 'string', businessType: 'string', child: allForm.value } })
然后就能成功了!!
總結(jié)
我自己的理解,就是將我們需要校驗(yàn)的值在一個(gè)偽造的form對(duì)象中處理,然后內(nèi)層遍歷的的真實(shí)form對(duì)象可以用指定值的方式去綁定校驗(yàn)規(guī)則。
到此這篇關(guān)于vue3.0中使用element UI表單遍歷校驗(yàn)問(wèn)題解決的文章就介紹到這了,更多相關(guān)element表單遍歷校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue $set 給數(shù)據(jù)賦值的實(shí)例
今天小編就為大家分享一篇vue $set 給數(shù)據(jù)賦值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11vue導(dǎo)入excel文件,vue導(dǎo)入多個(gè)sheets的方式
這篇文章主要介紹了vue導(dǎo)入excel文件,vue導(dǎo)入多個(gè)sheets的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue3+ts+element-plus實(shí)際開(kāi)發(fā)之統(tǒng)一調(diào)用彈窗封裝的詳細(xì)過(guò)程
這篇文章主要介紹了vue3+ts+element-plus實(shí)際開(kāi)發(fā)之統(tǒng)一調(diào)用彈窗封裝的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03vue使用echarts實(shí)現(xiàn)水平柱形圖實(shí)例
這篇文章主要介紹了vue使用echarts實(shí)現(xiàn)水平柱形圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Vue infinite update loop的問(wèn)題解決
這篇文章主要介紹了Vue "...infinite update loop..."的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04