gpt4 book ai didi

angular - 为什么要使用 Validators.compose()?

转载 作者:太空狗 更新时间:2023-10-29 16:56:53 26 4
gpt4 key购买 nike

我有一个字段要用多个验证器进行验证。
使用模块驱动方法,代码如下所示:

this.exampleForm = this.fb.group({
date_start : [
'',
Validators.compose([
Validators.required,
Validators.pattern("[0-9]{2}-[0-9]{2}-[0-9]{4}")
])]
})

但是我也可以在没有 Validators.compose() 的情况下写这个,比如:

this.exampleForm = this.fb.group({
date_start : [
'',
[
Validators.required,
Validators.pattern("[0-9]{2}-[0-9]{2}-[0-9]{4}")
]
]
})

而且效果很好。我个人更喜欢第二个版本(没有 compose),代码更少,可读性更好。这引出了一个问题,我为什么要使用 Validators.compose()?

最佳答案

当我们创建 new FormControl/FormGroup/FormArray(AbstractControl) - coerceToValidator 被调用。

function coerceToValidator(
validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|
null {
const validator =
(isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :
validatorOrOpts) as ValidatorFn |
ValidatorFn[] | null;

return Array.isArray(validator) ? composeValidators(validator) : validator || null;
}

export function composeValidators(validators: Array<Validator|Function>): ValidatorFn|null {
return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;
}

因此在我们将其传递给 AbstractControl 之前无需编写验证器。

6/13/16 添加了 feat(forms): compose validator fns automatically if arrays 从现在开始,Validators.compose 是为了向后兼容。

关于angular - 为什么要使用 Validators.compose()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42394999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com