v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐
問(wèn)題描述
在項(xiàng)目開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到表單保存的功能,在表單保存前,常常需要做表單必填項(xiàng)的校驗(yàn),校驗(yàn)通過(guò)以后才去發(fā)請(qǐng)求保存表單數(shù)據(jù)。
但是,這個(gè)表單如果是動(dòng)態(tài)的,即:可以新增相同的表單。比如這個(gè)表單有輸入框和下拉框需要校驗(yàn),點(diǎn)擊添加表格按鈕,再新增一個(gè)相同的表單,同樣新的這個(gè)表單對(duì)應(yīng)的輸入框和下拉框也需要校驗(yàn)。
本文記錄一下對(duì)應(yīng)代碼寫(xiě)法思路,我們先看一下效果圖:
效果圖

代碼思路
- 表單的主數(shù)據(jù)是要寫(xiě)成對(duì)象形式
:model="ruleForm"不過(guò)既然是要?jiǎng)討B(tài)的,肯定是要循環(huán)呢,所以,可以寫(xiě)成這樣:
ruleForm: {
// 動(dòng)態(tài)循環(huán)項(xiàng)數(shù)組
formItemArr: [
{
name: "",
gender: "",
},
],
},- 點(diǎn)擊添加表格的時(shí)候,就可以直接push對(duì)應(yīng)項(xiàng)就行啦,即,這樣:
// 添加一個(gè)表格
addForm() {
let itemObj = {
name: "",
gender: "",
};
this.ruleForm.formItemArr.push(itemObj);
},重點(diǎn)來(lái)嘍,因?yàn)槭茄h(huán)的,所以prop也要變成動(dòng)態(tài)的了,要拼接上index,就變成根據(jù)索引去找對(duì)應(yīng)的校驗(yàn)項(xiàng)了,即為:
:prop="'formItemArr.' + index + '.name'",這樣的話,就變成了:prop="formItemArr.0.name"、prop="formItemArr.1.name"、prop="formItemArr.2.name"... 這樣的話,就可以照顧到每一項(xiàng)中的每一個(gè)綁定的值了,校驗(yàn)就不會(huì)漏掉校驗(yàn)規(guī)則寫(xiě)成內(nèi)聯(lián)就可以觸發(fā)校驗(yàn)函數(shù)
this.$refs["ruleForm"].validate((val) => {})了
<el-form-item
label="姓名"
:prop="'formItemArr.' + index + '.name'"
:rules="{
required: true,
message: '請(qǐng)?zhí)顚?xiě)',
trigger: 'blur',
}"
>
......完整代碼
演示的話,大家直接復(fù)制粘貼即可
<template>
<div class="box">
<el-button @click="addForm" size="mini" type="primary" plain
>添加表格</el-button
>
<el-button @click="saveForm" size="mini" type="primary" plain
>保存表格</el-button
>
<br />
<br />
<el-form
:model="ruleForm"
ref="ruleForm"
label-width="100px"
class="formform"
>
<div
class="formformItemClass"
v-for="(item, index) in ruleForm.formItemArr"
:key="index"
>
<el-form-item
label="姓名"
:prop="'formItemArr.' + index + '.name'"
:rules="{
required: true,
message: '請(qǐng)?zhí)顚?xiě)',
trigger: 'blur',
}"
>
<el-input
size="mini"
v-model.trim="item.name"
placeholder="請(qǐng)?zhí)顚?xiě)"
style="width: 200px"
></el-input>
</el-form-item>
<el-form-item
label="性別"
:prop="'formItemArr.' + index + '.gender'"
:rules="{
required: true,
message: '請(qǐng)選擇',
trigger: 'change',
}"
>
<el-select
clearable
size="mini"
v-model="item.gender"
placeholder="請(qǐng)選擇"
>
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</el-form-item>
</div>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
ruleForm: {
// 動(dòng)態(tài)循環(huán)項(xiàng)數(shù)組
formItemArr: [
{
name: "",
gender: "",
},
],
},
};
},
methods: {
// 添加一個(gè)表格
addForm() {
let itemObj = {
name: "",
gender: "",
};
this.ruleForm.formItemArr.push(itemObj);
},
// 保存表格
saveForm() {
this.$refs["ruleForm"].validate((val) => {
if (val) {
console.log("符合要求,保存成功", this.ruleForm);
} else {
console.log("error submit!!");
return false;
}
});
},
},
};
</script>
<style lang="less" scoped>
.box {
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 24px;
.formform {
width: 360px;
.formformItemClass {
padding-top: 24px;
border: 2px dashed #ccc;
margin-bottom: 18px;
}
}
}
</style>到此這篇關(guān)于v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐的文章就介紹到這了,更多相關(guān)v-for el-form表單項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- el-form實(shí)現(xiàn)表單和圖片手動(dòng)上傳和校驗(yàn)功能
- vue實(shí)現(xiàn)多個(gè)el-form表單提交統(tǒng)一校驗(yàn)的2個(gè)方法
- elementUI動(dòng)態(tài)嵌套el-form表單校驗(yàn)舉例詳解
- 使用el-form之表單校驗(yàn)自動(dòng)定位到報(bào)錯(cuò)位置問(wèn)題
- vue中的el-form表單rule校驗(yàn)問(wèn)題(特殊字符、中文、數(shù)字等)
- vue之el-form表單校驗(yàn)以及常用正則詳解
- el-form的model、prop屬性和表單校驗(yàn)等使用
- el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼
相關(guān)文章
vue router+vuex實(shí)現(xiàn)首頁(yè)登錄驗(yàn)證判斷邏輯
這篇文章主要介紹了vue router+vuex實(shí)現(xiàn)首頁(yè)登錄判斷邏輯,用于判斷是否登錄首頁(yè),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Vue 簡(jiǎn)單實(shí)現(xiàn)前端權(quán)限控制的示例
這篇文章主要介紹了Vue 簡(jiǎn)單實(shí)現(xiàn)前端權(quán)限控制的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
如何實(shí)現(xiàn)雙向綁定mvvm的原理實(shí)現(xiàn)
這篇文章主要介紹了vue雙向數(shù)據(jù)綁定原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
詳解無(wú)限滾動(dòng)插件vue-infinite-scroll源碼解析
這篇文章主要介紹了詳解無(wú)限滾動(dòng)插件vue-infinite-scroll源碼解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
vue中使用vue-router切換頁(yè)面時(shí)滾動(dòng)條自動(dòng)滾動(dòng)到頂部的方法
這篇文章主要介紹了vue項(xiàng)目中在使用vue-router切換頁(yè)面的時(shí)候滾動(dòng)條自動(dòng)滾動(dòng)到頂部的實(shí)現(xiàn)方法,一般使用Window scrollTo() 方法實(shí)現(xiàn),本文給大家簡(jiǎn)單介紹了crollTop的使用,需要的朋友可以參考下2017-11-11
vue3+electron12+dll開(kāi)發(fā)客戶端配置詳解
本文將結(jié)合實(shí)例代碼,介紹vue3+electron12+dll客戶端配置,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06

