vee-validate以哪种顺序与验证器一起使用? (同步和异步)

时间:2018-08-09 15:17:19

标签: validation vue.js vee-validate

对于Vue.jsVeeValidate来说是新手,我想知道与字段关联的验证函数(规则)以什么顺序验证? (因为文档并未真正提及)

我曾经习惯Angular docs about validator function,想知道在 async 验证器之前是否调用过 sync 验证器。

1 个答案:

答案 0 :(得分:1)

在查看从line 649开始的有关validateator.js的 VeeValidate 2.0.9源代码之后,我们可以注意到一个_validate方法,该方法将(大致):

  1. 使用Object.keys使用字段规则创建Array,然后对其进行some
  2. 使用_test method并存储result(这直接是验证或Promise的结果)

  3. 具有Promise

    的数组中的堆栈异步(如果此Validator实例的fastExit属性为false,则进行同步)验证器(push
  4. 如果同步验证器(带有fastExit属性)发生错误,则退出

  5. reduce Array包含所有结果,以返回最终错误并堆积错误的结果

因此引用有关Object.keys方法的MDN:

  

Object.keys()方法返回给定对象属性 names 的数组,其顺序与普通循环中的顺序相同。

并引用另一个stackoverflow answer

  

Quoting John Resig

     

当前,所有主流浏览器都在   定义它们的顺序。 Chrome也可以做到这一点,除了   有几个案例。 [...]此行为明确未定义   由ECMAScript规范。在ECMA-262中,第12.6.4节:

     
    

枚举属性的机制...取决于实现。

  
     

但是,规范与实现完全不同。 ECMAScript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome团队认为这是一个错误,并将予以修复。

结论

最终顺序将取决于Object.keys 的浏览器实现,因此主要取决于验证器的定义顺序,但也可以按字母顺序!

默认情况下,fastExit属性为false,但可以在验证器选项中覆盖。此选项将从同步验证器获取第一个false结果,并返回错误。如果未设置,则结果将是在验证每个验证器后汇总所有错误。