问题,
我使用相同的组件进行读取/编辑例程 . 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
,如果可能的话,就像表单中的另一个控件值 .
2 回答
如果需要基于另一个控件验证控件,则需要将验证器提升到父控件 . 以下是验证器是否以人名(另一个控件值)开头的验证器示例 .
app.component.ts
app.component.html
Live demo
所以我以另一种方式工作,受到Tomasz Kula answer的启发
我创建了一个实现
AsyncValidator
接口的AsyncDirective
,我将额外的params作为`对象传递,在我的例子中它看起来像这样,这是我的
directive
代码,在我
HTML
,在我的后端,我检查存在和匹配,简单的逻辑!
会欣赏任何输入,