v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐
問題描述
在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到表單保存的功能,在表單保存前,常常需要做表單必填項(xiàng)的校驗(yàn),校驗(yàn)通過以后才去發(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)代碼寫法思路,我們先看一下效果圖:
效果圖
代碼思路
- 表單的主數(shù)據(jù)是要寫成對(duì)象形式
:model="ruleForm"
不過既然是要?jiǎng)討B(tài)的,肯定是要循環(huán)呢,所以,可以寫成這樣:
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)來嘍,因?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ī)則寫成內(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í)顚?, 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í)顚?, trigger: 'blur', }" > <el-input size="mini" v-model.trim="item.name" placeholder="請(qǐng)?zhí)顚? 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ò)位置問題
- vue中的el-form表單rule校驗(yàn)問題(特殊字符、中文、數(shù)字等)
- vue之el-form表單校驗(yàn)以及常用正則詳解
- el-form的model、prop屬性和表單校驗(yàn)等使用
- el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼
相關(guān)文章
使用Vue3+ts?開發(fā)ProTable源碼教程示例
這篇文章主要為大家介紹了使用Vue3+ts?開發(fā)ProTable源碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07vue面試created中兩次數(shù)據(jù)修改會(huì)觸發(fā)幾次頁面更新詳解
這篇文章主要為大家介紹了vue面試created中兩次數(shù)據(jù)修改會(huì)觸發(fā)幾次頁面更新問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12vue項(xiàng)目使用axios發(fā)送請(qǐng)求讓ajax請(qǐng)求頭部攜帶cookie的方法
今天小編就為大家分享一篇vue項(xiàng)目使用axios發(fā)送請(qǐng)求讓ajax請(qǐng)求頭部攜帶cookie的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09VUE設(shè)置和清除定時(shí)器的方式及遇到的問題
?最近需要再頁面里做個(gè)倒計(jì)時(shí),發(fā)現(xiàn)用clearInterval()清除定時(shí)器失效,下面這篇文章主要給大家介紹了關(guān)于VUE設(shè)置和清除定時(shí)器的方式及遇到的問題的相關(guān)資料,需要的朋友可以參考下2022-10-10Vue處理循環(huán)數(shù)據(jù)流程示例精講
這篇文章主要介紹了Vue處理循環(huán)數(shù)據(jù)流程,這個(gè)又是一個(gè)編程語言,?模版語法里面必不可少的一個(gè),?也是使用業(yè)務(wù)場景使用最多的一個(gè)環(huán)節(jié)。所以學(xué)會(huì)使用循環(huán)也是重中之重了2023-04-04vue router下的html5 history在iis服務(wù)器上的設(shè)置方法
這篇文章主要介紹了vue router下的html5 history在iis服務(wù)器上的設(shè)置方法,需要的朋友參考下吧2017-10-10uniapp組件uni-file-picker中對(duì)上傳的圖片進(jìn)行壓縮至1兆以內(nèi)(推薦)
我在做uniapp項(xiàng)目時(shí),用的uni-file-picker組件,這是我做的一個(gè)項(xiàng)目實(shí)例,主要是將圖片通過接口傳至后臺(tái)服務(wù)器,本文給大家分享uniapp組件uni-file-picker中對(duì)上傳的圖片進(jìn)行壓縮再上傳,感興趣的朋友跟隨小編一起看看吧2022-11-11