我试图使用Angular FormBuilder提供的额外参数映射
group(controlsConfig: {
[key: string]: any;
}, extra: {
[key: string]: any;
} | null = null): FormGroup
文档:FormBuilder
但面对
this.validator不是函数
如果我传递单个验证器而不是数组,则上述错误消失但验证不会发生?
有人可以帮我解决这个问题,还是提供使用额外地图参数的正确方法?
我的组件及其相应的模板如下:
app.component.ts
import { Component } from '@angular/core';
import { FormControl, Validators, FormGroup, FormBuilder } from '@angular/forms';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
formGroupNew: FormGroup;
constructor(private fb: FormBuilder) {
this.createForm();
}
createForm() {
this.formGroupNew = this.fb.group(
{ name: "Provide name"},
{ validator: [Validators.required, Validators.maxLength(5)] } );
}
validate() {
console.log(this.formGroupNew.controls["name"].status);
}
}
app.component.html:
<div class="container" [formGroup]="formGroupNew">
<input class="form-control" formControlName="name">
<button (click)="validate()">Validate</button>
</div>
答案 0 :(得分:3)
执行fb.group({...}, {validator: fn})
时,第一个参数是组的控件,第二个参数是组对象本身的配置参数,而不是包含在其中的控件。
导致错误的原因是该方法希望根据src接收函数而不是数组。
您可以在那里传递的ValidatorFn
将应用于FormGroup
对象,因此您可以创建自定义函数来检查组中多个控件的条件。因此,传递像Validators.length(5)
这样的东西是没有意义的,因为组的值是一个对象(你如何检查对象的条件?)。相反,Validators.required
是有意义的,因为当未设置所有控件时,该值可能为null。
假设您有两个自定义验证程序功能:CustomValidatorFnOne
,CustomValidatorFnTwo
,并且您希望将它们应用于该组以及所需的。你可以这样做:
fb.group({...}, {
validator: Validators.compose(
[
CustomValidatorFnOne,
CustomValidatorFnTwo,
Validators.required
]
)
})
通过这种方式,您可以将所有验证器组合成一个函数。