ElementUI循环生成的Form表单添加校验

ElementUI循环生成的Form表单添加校验

ElementUI 中使用循环生成的form表单需要动态添加校验的规则
在data中定义好需要的rule,使用Element的语法给 :rules 动态绑定

:prop="getAllTableData.${i}.value",getAllTableData是v-for绑定的数组,i是索引,value是表单绑定的v-model的名称

HTML代码片段

// An highlighted block
<!-- dialog -->
<el-dialog
    :title="dialogTitle"
    :visible.sync="dialogFormVisible"
    @close="dialogClose"
    :close-on-click-modal="false"
    width="40%"
    class="dialogForm-box"
>
    <el-form
        label-position="left"
        label-width="120px"
        ref="dialogRef"
        :model="getAllFormData"
    >
    	<!-- 循环开始  -->
        <template v-for="(item,i) in getAllFormData.getAllTableData">
        	<!-- 
        	判断循环中的元素是否需要下拉框  
        	:rules="item.rule"  循环中的数据 自定义的 rule 规则
        	:prop="`getAllTableData.${i}.value`"
        	每次循环的时候进行取值, 相当于给每个form绑定了唯一的model
        	-->
            <el-form-item
                v-if="item.selectFlag"
                :key="item.labelName"
                :label="item.labelName"
                :prop="`getAllTableData.${i}.value`"
                :rules="item.rule"
                class="selectInput-box"
            >
                <el-select v-model="item.value" placeholder="请选择">
                    <el-option
                        v-for="(item1) in item.selectOption"
                        :key="item1.value"
                        :label="item1.label"
                        :value="item1.value"
                    ></el-option>
                </el-select>
            </el-form-item>
            <el-form-item
                v-else-if="!item.hidden && item.disabled"
                :key="item.labelName"
                :prop="`getAllTableData.${i}.value`"
                :rules="item.rule"
                :label="item.labelName"
            >
                <el-input
                    v-model="item.value"
                    clearable
                    autocomplete="off"
                    :disabled="true"
                ></el-input>
            </el-form-item>
            <el-form-item
                v-else-if="!item.hidden"
                :key="i"
                :prop="`getAllTableData.${i}.value`"
                :rules="item.rule"
                :label="item.labelName"
            >
                <el-input v-model="item.value" clearable autocomplete="off"></el-input>
            </el-form-item>
        </template>
    </el-form>
    <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="FormSureBtn" :loading="SureBtnLoading">确 定</el-button>
    </div>
</el-dialog>

VUE中data中的声明

getAllFormData: {
		getAllTableData: [
		     {
		         labelName: "规则ID",
		         value: "",
		         propName: "ruleid",
		         disabled: true,
		         hidden: true,
		         // 规则必须也得定义在form绑定的model中
		         rule: {
		             required: false
		         }
		     },
		     {
		         labelName: "编码",
		         value: "",
		         propName: "code",
		         rule: {
		         	// ElementUI 表单校验规则的语法
		             validator: (rule, value, callback) => {
		                 if (value == "") {
		                     callback();
		                 } else {
		                 	// 采用正则表达式进行判断
		                     let reg = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
		                     if (reg.test(value)) {
		                         callback(new Error("请输入英文或数字"));
		                     } else {
		                         callback();
		                     }
		                 }
		             },
		             trigger: "blur"
		         }
		     },
		     {
		         labelName: "名称",
		         value: "",
		         propName: "name",
		         rule: {}
		     },
		     {
		         labelName: "审核类别",
		         value: "",
		         propName: "typename",
		         rule: {}
		     },
		     {
		         labelName: "字段名称",
		         value: "",
		         propName: "fieldcode",
		         rule: {}
		     },
		     {
		         labelName: "备注",
		         value: "",
		         propName: "memo",
		         rule: {}
		     },
		
		     {
		         labelName: "评分",
		         value: "",
		         propName: "mark",
		         prop: "mark",
		         rule: {
		             required: true,
		             validator: (rule, value, callback) => {
		                 if (value == "") {
		                     callback(new Error("请输入数字"));
		                 } else {
		                     let reg = /^[0-9]+([.]{1}[0-9]{1})?$/;
		                     if (!reg.test(value) || value > 100) {
		                         callback(new Error("请输入0-100的有效数字,可保留一位小数"));
		                     } else {
		                         callback();
		                     }
		                 }
		             },
		             trigger: "blur"
		         }
		     },
		     {
		         labelName: "警告标识",
		         value: "",
		         propName: "warnsign",
		         prop: "warnsign",
		         selectFlag: true,
		         selectOption: [
		             {
		                 value: "0",
		                 label: "否"
		             },
		             {
		                 value: "1",
		                 label: "是"
		             }
		         ],
		         rule: {
		             required: true,
		             message: "请选择对应的选项"
		         }
		     }
		 	]
 },

效果图

required: true,说明该内容是必须填写的

required: true,说明该内容是必须填写的
正则表达式可以自定义项目需求的样式

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你可以使用 Vue Element 的表单验证规则来实现多层循环的动态添加校验规则。下面是一个简单的示例代码,演示了如何使用 v-for 指令循环生成表单项,并动态添加校验规则: ```html <template> <el-form ref="form" :model="formData" :rules="formRules" label-width="100px"> <el-form-item v-for="(item, index) in formItems" :key="index" :label="item.label" :prop="item.prop"> <el-input v-model="formData[item.prop]" :placeholder="item.placeholder"></el-input> </el-form-item> </el-form> </template> <script> export default { data() { return { formData: {}, // 表单数据 formItems: [ // 表单项配置 { label: '姓名', prop: 'name', placeholder: '请输入姓名' }, { label: '年龄', prop: 'age', placeholder: '请输入年龄' }, // ... ], formRules: {} // 表单校验规则 }; }, mounted() { this.generateFormRules(); }, methods: { generateFormRules() { this.formItems.forEach(item => { // 根据不同的表单项生成对应的校验规则 // 这里只是示例,你可以根据实际需求进行修改 this.$set(this.formRules, item.prop, [ { required: true, message: `请输入${item.label}`, trigger: 'blur' }, // 其他校验规则... ]); }); } } }; </script> ``` 在上面的示例中,表单项的配置存储在 `formItems` 数组中,你可以根据实际需求自行修改。在 `generateFormRules` 方法中,通过遍历 `formItems` 数组,动态生成表单校验规则,并将其存储在 `formRules` 对象中。最后,在 `<el-form>` 组件上使用 `:rules` 属性绑定表单校验规则。 这样,你就可以实现多层循环动态添加校验规则的功能了。记得根据实际需求修改校验规则的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值