ele-ui表单验证,异步调用接口判断是否重名

背景

ele-ui使用表单验证,需要调用接口判断是否是重名,重名则停留在当前页,否则就进行到下一页。

存在问题

使用普通的validate

  rules: {
        name: [
          { required: true, trigger: ['blur', 'change'], message: '名称不能为空' },
          { min: 1, max: 32, trigger: ['blur', 'change'], message: '名称最小长度1,最大长度32!' },
          { pattern: /^(?=[a-z])([a-z0-9-]{0,31})([a-z0-9])$/, trigger: ['blur', 'change'], message: '名称格式错误' },
          {
            validator: (rule, value1, callback) => {
              let param = {
                name: value1
              }
              request('/url', 'GET', param).then((res) => {
                if (res.resultCode === 200) {
                  callback(new Error('名称重复!'))
                } else {
                  callback()
                }
              })
            },
            trigger: 'blur'
          }
        ]}

校验代码

 this.$refs.form.validate((valid) => {
   if (!valid) {
     isError = true
  }
})

运行时,失焦状态下可以报错,但是点击下一步,则会直接跳转;

打了断点看,下一步的操作已经执行,但是校验还没有返回;

解决方法

使用async await完美解决

async validateForm () {
  let valid = await this.$refs.form.validate().catch((err) => {
    return err
  })
  return valid
},
isError = this.validateForm()

则可以完美解决


版权声明:本文为weixin_43062742原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。