在Angular2中向FormGroup添加多个验证器

11
我该如何向 FormGroup 添加多个验证器?
一个 FormControl 可以接受一个验证器数组,但是 FormGroup 不能。除了创建单个自定义验证器之外,是否有其他解决方法?
我正在使用 rc4 版本。

1
也许可以通过 Validators.compose 实现? - David Bulté
2
是的,这就是我想做的,但在编译过程中出现了奇怪的错误。 例如:let myGroup = this.formBuilder.group({}, {validator: Validators.compose([this.myCustomValidator(variable1, variable2)])});只是为了让您了解myCustomValidator的作用,它返回一个验证器函数 return (group: FormGroup): {[s: string]: boolean} => {}我得到的错误是: Argument of type '((group: FormGroup) => { [s: string]: boolean; })[]' is not assignable to parameter of type 'ValidatorFn[]'. - Maxim
顺便提一句,这个自定义验证器本身是可以正常工作的:let myGroup = this.formBuilder.group({}, {validator: this.myCustomValidator(variable1, variable2)}); - Maxim
@DavidBulte,最终我通过Validators.compose使其正常工作了。我导入的是'@angular/core'中的Validators而不是'@angular/forms'中的Validators。如果您将其发布为答案,我会接受它。 - Maxim
谢谢 Maxim。很高兴它能正常工作。 - David Bulté
3个回答

20

可以通过Validators.compose()组合多个验证器。

API参考文档中得知:

compose(validators: ValidatorFn[]) : ValidatorFn

将多个验证器组合成一个函数,返回各个错误映射的联合。


1
文档链接已损坏,但答案仍然可行。 - Manatax
1
无法正常工作。 { validator: Validators.compose( [ this.validationFn1.bind(this), this.validationFn2.bind(this) ] ) } - Pritesh Acharya

8

实际上,FormGroup接受验证器数组,只是接口没有更新。将其转换为any即可。例如:

<any>[Validators.required, Validators.minlength(2)]

2
刚试了一下,虽然它没有抛出错误,但只有一个验证器能正常工作。你是使用FormBuilder.group还是普通的FormGroup? - Maxim
你找到解决方案了吗?@Maxim - Pritesh Acharya
@PriteshAcharya 我最终使用了Validators.compose()。还要记住,这个问题是关于Angular RC4的,现在已经更新到Angular 4或其他版本了,我已经转向Vue了。 - Maxim
我刚刚使用了两个验证器(required,maxlength),它对我起作用了。 - unkreativ

0
我遇到了同样的问题。我正在使用一个FormGroup和一个FormBuilder。 这是我为电子邮件输入设置两个验证器的方法:
emailForm : FormGroup;
CreatEmailForm(){
this.emailForm = this.formBuilder.group({
emial:["example@email.com", { validators: [Validator.required , Validators.email ]}],
context:[null , Validator.required]})
}

仔细阅读问题! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接