【发布时间】:2018-04-06 21:49:59
【问题描述】:
问题,
我将相同的组件用于读取/编辑例程。 async-validator 与新条目完美配合。如果用户不小心更改了值并尝试恢复为保存的值,问题就开始了。我当前的代码将无论如何运行并将值返回为现有值。我想传递更多数据以及控制值,以便验证该对值是否已经存在。
我正在发布相关代码,
这是我的form control,
patientEmail: new FormControl(
null,
[Validators.email, Validators.required],
FormControlValidator.createEmailAsyncValidator(
this.asyncValidatorService
),
),
我的异步验证器创建者类是,
export class FormControlValidator {
static createEmailAsyncValidator(asyncValidatorService: AsyncValidationService) {
return (control: AbstractControl) => {
if (!control.pristine) {
control.markAsPristine();
return asyncValidatorService
.validateEmailNotTaken(control)
.map((response: HttpResponse<boolean>) => {
return !response.body ? null : { taken: true };
});
}
return Observable.of(null);
};
}
最后是我的服务,
@Injectable()
export class AsyncValidationService {
constructor(private httpService: HttpClientService) {}
public validateEmailNotTaken(control: AbstractControl) {
return this.httpService.getRequest(
'PatientsRegistration/IsPatientEmailExist?email=' + control.value,
);
}
}
我希望能够将另一个参数传递给我的createEmailAsyncValidator,如果可能的话,类似于表单中的另一个控制值。
【问题讨论】:
-
您是否需要基于另一个控件来验证电子邮件?如果是这样,最佳实践是将验证器提升到父控件。如果需要,我可以提供示例。
-
@TomaszKula,电子邮件控件属于
formGroup,我需要将电子邮件控件与另一个分组吗?我会很感激这个例子 -
好的,给我 10 分钟,我会为你创造一些东西 :)
-
@TomaszKula,谢谢 :)
标签: angular angular-reactive-forms angular-validation