对于Vue.js和VeeValidate来说是新手,我想知道与字段关联的验证函数(规则)以什么顺序验证? (因为文档并未真正提及)
我曾经习惯Angular docs about validator function,想知道在 async 验证器之前是否调用过 sync 验证器。
答案 0 :(得分:1)
在查看从line 649开始的有关validateator.js的 VeeValidate 2.0.9源代码之后,我们可以注意到一个_validate
方法,该方法将(大致):
Object.keys
使用字段规则创建Array
,然后对其进行some 使用_test
method并存储result
(这直接是验证或Promise
的结果)
具有Promise
fastExit
属性为false,则进行同步)验证器(push
)如果同步验证器(带有fastExit
属性)发生错误,则退出
reduce
Array
包含所有结果,以返回最终错误并堆积错误的结果
因此引用有关Object.keys
方法的MDN:
Object.keys()方法返回给定对象属性 names 的数组,其顺序与普通循环中的顺序相同。
并引用另一个stackoverflow answer:
当前,所有主流浏览器都在 定义它们的顺序。 Chrome也可以做到这一点,除了 有几个案例。 [...]此行为明确未定义 由ECMAScript规范。在ECMA-262中,第12.6.4节:
枚举属性的机制...取决于实现。
但是,规范与实现完全不同。 ECMAScript的所有现代实现都按照定义它们的顺序遍历对象属性。因此,Chrome团队认为这是一个错误,并将予以修复。
最终顺序将取决于Object.keys
的浏览器实现,因此主要取决于验证器的定义顺序,但也可以按字母顺序!
默认情况下,fastExit
属性为false
,但可以在验证器选项中覆盖。此选项将从同步验证器获取第一个false
结果,并返回错误。如果未设置,则结果将是在验证每个验证器后汇总所有错误。