this.$refs.form.validate() 不执行问题的解决办法

问题:

使用以下方法获取校验状态的时候,一直获取不到,console没有结果输出

this.$refs.form.validate().then(valid => {
  console.log(valid)
})

原因:

①存在没有加入验证规则的 prop

如:在代码中写了很多这样的 prop,作为需要验证的字段:

<FormItem label="URL过滤" prop="groupId">

但是,在定义的 rules 里面没有出现该 prop:

rules: {
  schemaId: [{ required: true, message: '必填'}],
}

注意:一般来讲,多加上 prop 不会有问题,还有可能是自定义的校验有问题

②  自定义校验规则存在没有调用到 callback() 的情况

如:没有验证 value 为空的情况:

    const validateFilter = (rule, value, callback) => {
     if (!value.every(item => HTTPHEADER_KEYWORD_REGEXP.test(item))) {
        callback(new Error('关键字格式错误:每个最长255字符,不能包含中文'))
      } else if (value.join('').length > 2048) {
        callback(new Error('错误:总长度不能超过2048字符'))
      } else {
        callback()
      }
    }

上述判断中没有考虑到 value 为空的情况也要执行一次 callback(),因此当 value 为空时校验状态也不执行。

    const validateFilter = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!value.every(item => HTTPHEADER_KEYWORD_REGEXP.test(item))) {
        callback(new Error('关键字格式错误:每个最长255字符,不能包含中文'))
      } else if (value.join('').length > 2048) {
        callback(new Error('错误:总长度不能超过2048字符'))
      } else {
        callback()
      }
    }

解决思路:

  • 根据框架文档,检查代码书写规范
  • 打印this.$refs.form.validate(),看状态,如果状态是pedding(待办),还没有执行完成,继续看校验规则问题,是否考虑全面需要执行 callback() 的情况。
  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值