vue + el-form 實(shí)現(xiàn)的多層循環(huán)表單驗(yàn)證
html
<el-form :model='formObj' :rules='rules' ref='ruleForm'> <el-form-item :label='’護(hù)理記錄項(xiàng)目配置:’' label-width='180px'> <template v-for='(formItem, index) in formObj.formDictExtendDoList'> <div :key='formItem.id'> <el-row> <el-col :span='8'> <el-form-item :label='’字段名稱(chēng):’' label-:rules='rules.fieldName' :prop='’formDictExtendDoList.’+index+’.fieldName’' > <el-inputv-model.trim='formItem.fieldName'type='text':clearable='true'maxLength='100'placeholder='請(qǐng)輸入' /> <!--@blur='isRepeat(formItem, index, ’fieldName’)'--> </el-form-item> </el-col> <template v-for='(child, index1) in formItem.item' v-show='formItem.type === 2' > <el-col :span='8' :key='child.id'> <el-form-item:label='’選項(xiàng)’ + (index1+1) + ’:’'label- :rules='rules.value':prop='’formDictExtendDoList.’+index+’.item.’+index1+’.value’' ><el-input v-model.trim='child.value' @input='forceUpdate' :clearable='true' type='text' maxlength='20' placeholder='請(qǐng)輸入'/> </el-form-item> </el-col> </template> </el-row> </div> </template> </el-form-item></el-form>
js
let _THATexportdefault { name: ’formMangeAdd’, data() { return { formObj: {formDictExtendDoList: [] }, rules: {fieldName: [{ required: true, message: ’請(qǐng)輸入’, trigger: ’blur’}, { validator: this.itemValidator, trigger: ’blur’}],value: [{ validator: (rule, value, callback) = > { // I’m a genius. let that = _THAT that.forceUpdate() let field = rule.field let arr = field.split(’.’) let index = +arr[1] let index1 = +arr[3] let _value = that.formObj.formDictExtendDoList[index].item[index1].value if (_value === ’’ || _value === null || _value === undefined) { callback(new Error(’請(qǐng)輸入’)) } else { callback() } }, trigger: ’blur’}] } } }, beforeCreate() { _THAT = this }, created() { // 測(cè)試數(shù)據(jù) let test = [{ id: ’id_1595641858891’, // 唯一配置id fieldName: ’字段名稱(chēng)’, // 字段名稱(chēng) item: [] }, { id: ’id_1595641858892’, // 唯一配置id fieldName: ’字段名稱(chēng)’, // 字段名稱(chēng) item: [] }, { id: ’id_1595641858893’, // 唯一配置id fieldName: ’字段名稱(chēng)’, // 字段名稱(chēng) item: [{id: ’item_id_1595641858891’,// 唯一idvalue: ’選項(xiàng)1’ }, {id: ’item_id_1595641858892’,// 唯一idvalue: ’選項(xiàng)2’ }] }] this.formObj.formDictExtendDoList = test }, methods: { /** * 重復(fù)性判斷 **/ itemValidator: (rule, value, callback) = > { let that = _THAT that.forceUpdate() let field = rule.field let ruleArr = field.split(’.’) let index = +ruleArr[1] let type = ruleArr[2] if (value === ’’) {callback()return false } let arr = [] for (let i = 0; i < that.formObj.formDictExtendDoList.length; i++) {let formDictExtendDoListItem = that.formObj.formDictExtendDoList[i]let formDictExtendDoListFieldName = formDictExtendDoListItem.fieldNamelet formDictExtendDoListProjectName = formDictExtendDoListItem.projectNameif (index !== i) { if (type === ’fieldName’) { if (formDictExtendDoListFieldName !== ’’) { if (formDictExtendDoListFieldName === value) {arr.push(i) } } }} } if (arr.length !== 0) {if (type === ’fieldName’) { callback(new Error(’與配置’ + (+arr[0] + 1) + ’的字段名稱(chēng)重復(fù)’)) setTimeout(function() { that.formObj.formDictExtendDoList[index].fieldName = ’’ }, 500)} } else {callback() } }, forceUpdate() { this.$forceUpdate() } }}
以上就是vue + el-form 實(shí)現(xiàn)的多層循環(huán)表單驗(yàn)證的詳細(xì)內(nèi)容,更多關(guān)于vue 表單驗(yàn)證的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)2. XML入門(mén)的常見(jiàn)問(wèn)題(三)3. 前端html+css實(shí)現(xiàn)動(dòng)態(tài)生日快樂(lè)代碼4. XML實(shí)體注入深入理解5. Xpath語(yǔ)法格式總結(jié)6. 不要在HTML中濫用div7. 利用CSS3新特性創(chuàng)建透明邊框三角8. Vue3獲取DOM節(jié)點(diǎn)的3種方式實(shí)例9. WMLScript腳本程序設(shè)計(jì)第1/9頁(yè)10. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera
