Element 动态增减表单项+自定义校验规则

动态增减表单项+自定义校验规则

使被遍历的每条数据都被校验,效果图例如:
示意图
上图仅作参考,非下面代码的运行图。

html:核心代码就是 :prop:rules 的定义

<el-form-item label="IP白名单列表:" :rules="[{ required: true }]">
	<div v-for="(item, index) in editForm.list" :key="index">
		<el-form-item :prop="`list.${index}.tel`" :rules="editRules.tel">
			<el-input v-model="item.tel" placeholder="请留下联系方式"></el-input>
		</el-form-item>
	</div>
</el-form-item>

js:

export default {
    data() {
    
		 // 电话号码-校验规则:
      	const validateTel = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请留下联系方式'))
        } else {
          let reg = /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
          if (reg.test(value) == true) {
          // 对:
            callback()
          } else {
          // 错:
            callback(new Error('请留下正确的联系方式'))
          }
        }
      }

      	return {
			editForm: {
				list: [{ tel: '120', name: '急救' },{ tel: '119', name: '火警' }]
			},
			editRules: {
				 tel: [{ validator: validateTel, trigger: 'change' }],
			}
		}
	}
}

关于 Cascader 级联选择器 的校验

效果如下:
示意图

示范代码:

		<el-form
          ref="ruleForm"
          :model="ruleForm"
          :rules="rules"
          label-width="120px"
          class="demo-ruleForm"
          :validate-on-rule-change="false"
        >
          <el-form-item label="综合服务主体:" prop="servicePrincipal">
            <el-cascader
              v-model="ruleForm.servicePrincipal"
              placeholder="请选择综合服务主体"
              :options="serviceValue"
              :props="{ expandTrigger: 'hover', value: 'id', label: 'name' }"
              :show-all-levels="false"
              clearable
              @change="servicePrincipalChange"
            ></el-cascader>
          </el-form-item>
		</el-form>

		data() {
			return {
				serviceValue: [], // 综合服务主体列表
				ruleForm: {
					servicePrincipal: [], // 选中的综合服务主体
				},
				rules: {
					servicePrincipal: [
			            {
			              type: 'array',
			              required: true,
			              message: '请选择综合服务主体',
			              trigger: 'change',
			            },
			    	],
				}
			}
		}

注意点:

  • 由于后端返回数据的属性名为 idname,而 ElementUI 的级联选择器只能通过 valuelabel 来渲染数据,所以我们在 prop 中进行了转换。
  • ElementUI 的级联选择器校验规则出加上了 type: 'array',虽说不加也能进行校验,但写上还是能避免某些情况下出现 bug。

结束图

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值