我有以下型号:
export interface Content {
lang: string;
title: string;
}
我需要验证此contents FormArray
的{{1}}:
parent FormGroup
对于this.formBuilder.group({
defaultLang: ['', Validators.required],
contents: this.formBuilder.array([], Validators.minLength(1))
});
中的每个Content
,我使用以下contents FormArray
验证模型:
content FormGroup
目前,我向this.formBuilder.group({
lang: ['', Validators.required],
title: ['', Validators.required]
});
添加了以下content FormGroup
以验证每个contents FormArray
:
Content
但是使用这种方法我无法验证这些规则:
(<FormArray>parentFormGroup.controls['contents'])
.push(this.contentFormGroup);
字段已填满,则会进行内容验证(这意味着将Content
添加到content FormGroup
)contents FormArray
content FormGroup
(如果有)contents FormArray
的{{1}}是lang
的{{1}},那么内容就是必需的。问题
是否只是使用验证工具添加/删除Content
的{{1}}?
有没有办法只使用Angular本地验证器?
我是否需要创建自定义验证器?如果是,您是否有一个很好的例子来使用defaultLang
?
答案 0 :(得分:0)
您可以将验证器添加到组中,如下所示
this.group = this.formBuilder.group({
lang: ['', Validators.required],
title: ['', Validators.required]
});
this.group.setValidators([
this.titleRequiredValidator(),
]);
private titleRequiredValidator(): ValidatorFn {
return (group: FormGroup): { [key: string]: any } => {
const langControl = group.controls.lang;
const titleControl = group.controls.title;
if (langControl.value !== '' && titleControl.value == '')) {
const error = { required: true };
titleControl.setErrors(error);
return error;
}
else {
titleControl.setErrors(null);
return null;
}
};
}