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

 更新时间:2023年09月26日 09:01:37   作者:ZHANG.......  
这篇文章主要介绍了如何解决this.$refs.form.validate()不执行的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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() 的情况。

this.$refs.form.validate()不起作用

问题描述?

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

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

解决方法

去掉没有加入验证规则的prop

什么意思呢?

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

<FormItem label="跨网网关" prop="groupId">

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

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

解决思路

因为我使用的是ivew框架,所以我会先去ivew官网查看一番,一般一些比较简单的问题,直接翻官网都能得到解决,但是我这种比较无厘头的问题,很明显,我在官网并没有得到什么实质性的收获

上百度,就算不能从前辈或同行那里得到什么实质性的解决,但最少也能开阔一下自己的脑洞。

我就顺带说下我得收获:

确定自定义得规则在最后都进行了callback()回调

可以自己将this.$refs.form.validate()打印出来看看状态

虽然看上去,并没有什么实质性得解决,但是我从中明白了,肯定是我的校验没有完成,二话不多说。

console.log(this.$refs.form.validate())

果不其然啊,我的状态是pedding(待办)状态,还没有执行完成,这个时候又继续排查,确保校验规则没有问题,那么就只能是上面,我自己定义多了prop字段,去掉后,正常呢。

一般来讲多加上prop不会有问题,还有可能是你的自定义的校验有问题(有可能是你的自定义规则里面没有写callback(),检查一下)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue+Java 通过websocket实现服务器与客户端双向通信操作

    Vue+Java 通过websocket实现服务器与客户端双向通信操作

    这篇文章主要介绍了Vue+Java 通过websocket实现服务器与客户端双向通信操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue3实现ai聊天对话框功能

    vue3实现ai聊天对话框功能

    这篇文章主要介绍了vue3实现ai聊天对话框功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • vue.js实现只弹一次弹框

    vue.js实现只弹一次弹框

    本篇文章通过代码实例给大家详细讲述了一个vue的实例,实现只弹一次弹框功能,一起学习分享下。
    2018-01-01
  • vue导入处理Excel表格功能步骤详解

    vue导入处理Excel表格功能步骤详解

    最近开发遇到一个点击导入按钮让excel文件数据导入在表格的需求,所以下面这篇文章主要给大家介绍了关于vue导入处理Excel表格功能步骤的相关资料,需要的朋友可以参考下
    2022-07-07
  • Vue3实现手写签名之Vue3-signature的快速应用实例

    Vue3实现手写签名之Vue3-signature的快速应用实例

    签名组件在许多应用场景中都非常有用,比如在线合同签署、电子表格签名等,这篇文章主要介绍了Vue3实现手写签名之Vue3-signature的快速应用的相关资料,需要的朋友可以参考下
    2026-04-04
  • 如何解决vue-json-editor无法输入中文、重影问题

    如何解决vue-json-editor无法输入中文、重影问题

    文章介绍了如何解决vue-json-editor组件无法输入中文和重影的问题,通过修改源码并使用vue-json-edit-fix-cn组件来 fix 这两个问题,同时,文章还提供了如何移除旧的依赖包并安装新的依赖包的步骤
    2025-01-01
  • vue 解决computed修改data数据的问题

    vue 解决computed修改data数据的问题

    今天小编就为大家分享一篇vue 解决computed修改data数据的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue项目中,main.js,App.vue,index.html的调用方法

    vue项目中,main.js,App.vue,index.html的调用方法

    今天小编就为大家分享一篇vue项目中,main.js,App.vue,index.html的调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue底部加载更多的实例代码

    vue底部加载更多的实例代码

    本文通过实例代码给大家介绍了vue底部加载更多,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Vue3中使用vant的踩坑实战日记

    Vue3中使用vant的踩坑实战日记

    Vant是有赞前端团队开源的移动端组件库,于2017年开源,已持续维护4年时间,下面这篇文章主要给大家介绍了关于Vue3中使用vant的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10

最新评论