Angular 验证器FN函数的正确返回值是多少?
我的自定义验证器中有以下代码:Angular 验证器FN函数的正确返回值是多少?,angular,validation,Angular,Validation,我的自定义验证器中有以下代码: 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 = Ma
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
};
};
}
从'@angular/forms'导入{ValidatorFn,AbstractControl};
//这项职能的功劳:
// https://stackoverflow.com/a/17390131/2044
函数isPrime(编号:number):布尔值{
让我们开始:数字=2;
常数限制:数量=数学sqrt(数量);
同时(开始1;
}
导出类NumberValidator{
静态isPrimeNumber():验证器fn{
return(control:AbstractControl):{[key:string]:boolean}| null=>{
if(isPrime(control.value)){
返回null;
}
返回{
isPrimeNumber:对
};
};
}
这段代码可以工作;但是,在我看来,它似乎是向后的。它似乎是if
语句向外180度-,当值有效时,它应该返回对象(带有true
),当值无效时,它应该返回null
所以我的问题是:这是怎么回事?我承认验证器的返回值看起来有点古怪,但文档中有您需要的所有信息: 接收控件并同步返回验证错误映射(如果存在)的函数,否则返回null 根据定义,当没有错误时,验证器函数返回null。否则,它返回一个由键定义错误的对象 这也正是这个方法签名所说的:
(control: AbstractControl): { [key: string]: boolean } | null
此验证器函数接受抽象控件类型的输入,并将返回键为字符串且值为布尔值或null的对象。是的,这在我看来也总是有点倒退。这几乎就像这些应该被称为
无效器
,因为它们在无效时返回true
。似乎是这样反对“干净代码”原则,因为仅仅阅读它并不能清楚地传达其结果。