Element-ui form表单对el-autocomplete校验问题

在使用element-ui做一个form表单时发现了一个问题。表单是通过dialog打开的,如果校验未通过关闭了dialog弹窗,再次打开时校验结果未被重置。表单主要用了el-autocomplete和el-input组件。
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<el-form-item label="客户" prop="ct_id">
  <el-autocomplete
    ref="ctAutocompleteRef"
    v-model="formData.ct_name"
    placeholder="选择客户"
    clearable
    size="mini"
    :fetch-suggestions="ctSearchAsync"
    :trigger-on-focus="false"
    :highlight-first-item="true"
    @select="ctSearchSelect"
  ></el-autocomplete>
</el-form-item>
<el-form-item label="未税单价" prop="price">
    <el-input type="float" v-model="formData.price" oninput="value=value.replace(/[^?\d.]/g,'')"></el-input>
</el-form-item>
1
2
3
4
5
// 校验规则
formRules: {<!-- -->
   ct_id: [{<!-- --> required: true, type: 'integer', min: 1, message: '请正确选择客户', trigger: 'change' }],
   price: [{<!-- --> required: true, message: '未税单价不能为空', trigger: 'blur' }]
}
1
2
3
4
5
dialogClosed() {<!-- -->
  // 关闭dialog执行
  this.formData = this.$options.data().formData
  this.$refs.formRef.clearValidate()
}

通过上面代码可以看出对客户的校验其实校验的是id为正整数,并且大于0。在关闭弹窗时会将整个表单重置为初始值并且清除表单校验。对“单价”这个el-input这么来操作是没有问题的,但是对“客户”这个el-autocomplete第二次打开dialog时校验并没有清空。
查了好久,发现原因在于客户校验的trigger: ‘change’,并且关闭弹窗时将数据重置了,又触发了一次校验。
解决方法:对清除校验加上延时处理

1
2
3
4
5
6
dialogClosed() {<!-- -->
  this.formData = this.$options.data().formData
  setTimeout(() => {<!-- -->
    this.$refs.formRef.clearValidate()
  }, 500)
}