2

作为Vue.jsVeeValidate的新手,我想知道与字段关联的验证器函数(规则)的验证顺序是什么?(因为文档并没有真正提到它)

我习惯了有关验证器功能的 Angular 文档,并且想知道是否在异步验证器之前调用了同步验证器。

4

1 回答 1

2

在查看VeeValidate 2.0.9 源代码关于 validator.js 开始行 649之后,我们可以注意到一个_validate方法(大致):

  1. Array使用字段规则创建一个Object.keys然后对其执行一些操作
  2. 使用该_test方法并存储result(即直接验证的结果或 a Promise

  3. 堆栈异步(如果fastExit此 Validator 实例上的属性为 false,则同步)验证器(Promise)在一个数组中,带有push

  4. fastExit如果同步验证器(使用属性)发生错误,则退出

  5. reduce包含Array所有结果以返回带有错误堆叠的最终结果

所以引用MDN关于该Object.keys方法:

Object.keys()方法返回给定对象的属性名称数组,其顺序与我们在正常循环中得到的顺序相同。

并引用另一个stackoverflow答案

引用 John Resig 的话

目前所有主流浏览器都按照定义的顺序循环对象的属性。Chrome 也这样做,除了几个案例。[...] ECMAScript 规范明确未定义此行为。在 ECMA-262 中,第 12.6.4 节:

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

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

结论

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

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

于 2018-08-09T15:17:19.130 回答