Angular自定义表单验证器使用其他控件



我试图为我的Angular 9 Form实现一个自定义验证器。验证有点困难。

因为几个字段取决于选择输入的选择。

例如,如果我选择了我选择的选项之一,则需要Formfield 3。

但如果我选择选项二,则需要Formfield 5。

这就是为什么我编写了一个自定义验证器:

export class FormComponent {
public form: FormGroup = new FormGroup({
...
selectField: new FormControl(null, [Validators.required]),
...
formField3: new FormControl(null, [this.validatorArtAende]),
formField4: new FormControl(),
formField5: new FormControl(null, [this.validatorArtAender])
});
validator (control: AbstractControl) => {
if (this.form.value.selectField === 'option1' && control.value.length === 0) {
return { required: true };
}
return null;
}
}

问题是this.form是unknwon(无法读取未定义的属性"form"(。那么,有没有任何选项可以将diffrent控件的表单或值传递给自定义验证器?

根据文档,AbstractControl具有Parent属性。您应该能够使用它遍历到您的父FormGroup,然后遍历到验证器内的selectField

validator (control: AbstractControl) => {
if (control.parent && control.parent.controls['selectField'] === 'option1' && control.value.length === 0) {
return { required: true };
}
return null;
}

最新更新