el-form校验项为数组&&组件是自定义组件校验遇到的坑

情况说明

  • el-form校验项为数组
  • 自定义组件(非elementUI表单组件)
<el-form-item prop="fileList" :rules="rules">
  <!-- 文件上传自定义组件,接收是一个数组类型的集合 -->
  <ty-upload :fileList.sync="form.fileList" />
</el-form-item>
rules: [{ required: true, message: "请选择", trigger: "change" }],

问题说明

  • 此时校验不生效
  • 自定义校验validator也无效

解决办法

 watch: {
   // 校验主动处理
   "form.fileList"(val) {
      this.$nextTick(() => {
        this.$refs?.form?.validateField("fileList");
      });
   },
 },

思考:当我们开`el-select的multiple时,v-model绑定的值也是数组,为什么可以正常触发校验?

因为在el-select组件的源码中,他主动触发了el-form的校验,但我们组件内部是没有触发的

最后提一下自定义校验,用于一些校验一些复杂的值

validator的参数有:(rule, value, callback),前三个比较重要。

  • rule:指向该条规则对象。
  • value:新的值,用于参与运算、对比。
  • callback:执行回调,使用方法是:callback(‘…’);。
  • 如果不传参:表示验证通过,一般不必专门强调。
  • 如果传入值:字符串会作为错误提示,但是显示优先级低于外层的message。比如callback(‘内层错误提示’);跟message: '外层错误提示’同时存在,则会提示:外层错误提示。
data() {
  const name = (rule, value, callback) => {
    console.log(rule);
    console.log(value);
    console.log(callback);
    if (this.oldName === value) {
      callback(new Error("新名字不能和旧名字一致"));
    } else {
      callback();
    }
  };
  return {
    rules: {
      name: [
        { required: true, trigger: "blur", message: "请再次输入新名字" },
        { required: true, validator: name, trigger: "blur" },
      ],
    },
  };
},
el-form-renderer是一个基于Element UI的表单渲染器,用于简化表单的开发和校验。而el-form-item是el-form-renderer中的一个组件,用于包裹表单项并进行校验。 在el-form-item中,可以通过rules属性来定义校验规则。rules属性是一个数组,每个元素都是一个对象,用于描述一个校验规则。每个规则对象包含以下属性: 1. required(必填):指定该字段是否为必填项,可以是一个布尔值或者一个函数。如果是函数,则根据函数的返回值来确定是否必填。 2. validator(自定义校验函数):指定一个自定义的校验函数,该函数接收三个参数:rule(当前规则对象)、value(当前字段的值)和callback(回调函数)。在自定义校验函数中,可以根据具体的业务逻辑进行校验,并通过调用callback回调函数来返回校验结果。 3. trigger(触发方式):指定触发校验的方式,默认为'change',即在字段值改变时触发校验。还可以设置为'blur'(失去焦点时触发校验)或'submit'(表单提交时触发校验)。 4. message(错误提示信息):指定校验失败时的错误提示信息。 以下是一个示例代码,展示了如何在el-form-renderer中使用el-form-item进行校验规则的定义: ```html <el-form-renderer :model="formData" :rules="formRules"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> </el-form-renderer> ``` ```javascript data() { return { formData: { username: '' }, formRules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 6, max: 12, message: '用户名长度在6到12个字符之间', trigger: 'blur' } ] } }; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值