el-form嵌套el-transfer必填项校验问题

804 阅读1分钟

前提概要

  • 使用的弹出框包的,el-form和el-transfer。
  • 使用的el-form包裹的el-transfer。
  • el-transfer使用的可搜索功能。

症状表现

el-transfer在页面弹出,加载的时候,触发了校验。如下图:此时的触发方式是change

image.png 校验规则如下:

rules = { xxxx: [{ type: 'array', required: true, message: '请选择xxxx', trigger: 'change'}]}

症状原因

表面原因

  • 校验的规则选择的触发方式是change
  • 排除了和业务相关的代码。
  • 使用官网的示例,也是可以复现。

深入探究

  • el-transfer组件的this.dispatch('QFormItem', 'el.form.change', val);
  • el-form的rules规则

对症下药

目前的处理方法是:触发方式修改为blur;在el-transfer,change的时候,调用表单的validate方法。

触发方式修改为blur,防止弹出框触发表单校验。change的时候,调用表单的validate方法,是为了处理错误信息。 上代码:

// xxx必填校验处理
const handleChange = () => {
  _this.$refs.form.validate();
};

其他参考方案

总结

还是没有找到最后的原因,这只是一个临时的解决办法。