今天遇到了iview動態添加表單,並且深度驗證表單的問題。
功能如圖:
科目可以動態新增,並且科目非空,成績在0-100區間內。
- html部分,v-for遍歷form子屬性scoreList。
- 內部FormItem prop規則為[子屬性].[索引].[子屬性]
- rules手動指定
... <Table border :columns="column" :data="form.scoreList"> <template slot-scope="{ row, index }" slot="subject"> <FormItem :prop="`scoreList.${index}.subject`" :label-width="0" :rules="rules.subject"> <Select v-model="form.scoreList[index].subject" transfer> <Option v-for="(item,idx) in subjectList" :key="index + '_' + idx" :value="item.value" :disabled="hasSelectedSubject[item.value]"> {{item.label}} </Option> </Select> </FormItem> </template> <template slot-scope="{ row, index }" slot="score"> <FormItem :prop="`scoreList.${index}.score`" :label-width="0" :rules="rules.score"> <Input v-model="form.scoreList[index].score" /> </FormItem> </template> <template slot-scope="{ row, index }" slot="edit"> <Button type="error" size="small" @click="delSubject(index)">刪除</Button> </template> </Table> ...
data () { return { // 表單數據 form: { name: '', sex: 'male', provinceCode: '', cityCode: '', scoreList: [{ subject: '', score: '' }] }, rules: { ... subject: [ { required: true, message: '請選擇科目!', trigger: 'change' } ], score: [ { required: true, message: '請輸入成績!', trigger: 'blur' }, { pattern: /^\d+$/, message: '成績必須為整數!', trigger: 'blur' }, { validator (rule, value, callback) { value = Number(value) if (value <= 100 && value >= 0) { callback() } else { callback(new Error('成績必須為0-100之間的整數!')) } }, message: '請輸入成績!', trigger: 'blur' } ] }, ... } }