Vue3 循环表单对复杂校验规则的实现

        最近又遇到了个很奇怪的需求,需要循环表单列表中某一项的数据状态来确定其他的数据是否必填;这就需要在写自定义表单校验规则的时候 获取到当前列的信息。

        一般的ElementPlus的循环表单的自定义校验,通过 props添加“动态的下标+属性名” 来绑定自定义校验规则中validator函数的value值,这里拿ElementPlus的源码举例:

        这里在validator接收函数只能获取到el-form-item 绑定的数据项的数据信息;那要怎么才能获取到当前列的信息呢?

        我的解决方案是将validator所接收的函数 改为了 去接收一个 “执行接收(domain,index)参数并返回 checkName函数的新函数”; 通过返回回调函数的方式 获取到当前列数据项的值,代码如下:

        

        这样就可以在 validator函数中获取到 domain和当前的数据项下标的信息了

附注: 

        之前在返回的函数中是直接引用了非返回函数的作用域的变量并将函数返回了出去 这样有可能会引起闭包影响页面性能;那么可以将 接收的domain和index形参 放到 返回的函数上就可以了,修改后的代码如下:

const checkName = (domainInfo:DomainItem, indexNumber:number) => {
  return  (rule: any, value: any, callback: any, source: any, options: any, item = domainInfo, index = indexNumber) => {
    console.error(item,index)
    if (value === '') {
      callback(new Error('Please input the name'))
    } else {
      callback()
    }
  }
}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 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` 属性绑定校验规则。 这样,你就可以实现多层循环动态添加校验规则的功能了。记得根据实际需求修改校验规则的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值