这个问题是由于在创建自定义验证器时,无法获得AbstractControl.parent的引用,因此需要进行一些更改来解决问题。
解决方法包括:
1.在自定义验证器中传递FormGroup的引用作为参数。
例如:
export function myCustomValidator(myFormGroup: FormGroup): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
// use the FormGroup reference to perform the validation
if (myFormGroup.controls[control.parent?.get('password')?.value]) {
return null;
} else {
return {'customValidation': true};
}
};
}
这样就可以在自定义验证器中访问FormGroup,从而避免了“AbstractControl.parent可能为空”的问题。
2.在FormGroup中注册自定义验证器。
例如:
this.myFormGroup = this.formBuilder.group({
password: ['', Validators.required],
confirmPassword: ['', [Validators.required, myCustomValidator(this.myFormGroup)]]
});
在此示例中,myCustomValidator通过传递this.myFormGroup作为参数来获得FormGroup的引用。
这两种方法都可以解决“AbstractControl.parent可能为空”的问题,在创建自定义验证器时特别有用。