Angular中ValidatorFn函数的正确返回值是多少?

Nic*_*ges 2 validation angular

我的自定义验证器中有以下代码:

import { ValidatorFn, AbstractControl } from '@angular/forms';

// Credit for this function:
// https://stackoverflow.com/a/17390131/2044
function isPrime(aNumber: number): boolean {
  let start: number = 2;
  const limit: number = Math.sqrt(aNumber);
  while (start <= limit) {
    if (aNumber % start++ < 1) {
      return false;
    }
  }
  return aNumber > 1;
}

export class NumberValidators {
  static isPrimeNumber(): ValidatorFn {
    return (control: AbstractControl): { [key: string]: boolean } | null => {
      if (isPrime(control.value)) {
        return null;
      }
      return {
        isPrimeNumber: true
      };
    };
  }
Run Code Online (Sandbox Code Playgroud)

这段代码有效; 然而,它似乎倒退了我.看起来这个if语句是180度 - 它应该true在值验证时返回对象(with ),否则返回null.

所以我的问题是:这里发生了什么?

Crh*_*rez 5

我承认验证器的返回值看起来有点时髦,但是文档上有你需要的所有信息:https://angular.io/api/forms/ValidatorFn

接收控件并同步返回验证错误映射(如果存在)的函数,否则为null.

根据定义,当没有错误时,验证器函数返回null.否则,它返回一个对象,其中错误由键定义.

这也正是这个方法签名所说的:

(control: AbstractControl): { [key: string]: boolean } | null 
Run Code Online (Sandbox Code Playgroud)

此验证器函数接受类型为抽象控件的输入,并将返回EITHER一个对象,其中键是一个字符串,值为布尔值OR null.