У меня проблема с использованием угловых 2 асинхронных валидаторов.Проблема с угловым массивом асинхронных асинхронных систем: асинхронный валидатор всегда возвращает ошибку проверки
У меня есть следующий компонент:
@Component({
templateUrl: './send-activation-information.component.html'
})
export class SendActivationInformationComponent implements OnInit {
activationInformationForm: FormGroup;
submitted: boolean = false;
constructor(private userAccountService: UserAccountService,
private formBuilder: FormBuilder,
private router: Router) {
}
ngOnInit() {
this.activationInformationForm = this.formBuilder.group({
email: ['', [
Validators.required,
Validators.pattern(AppConstants.EMAIL_PATTERN)
], [
validateEmailKnownFactory(this.userAccountService),
validateUserAccountNonActivatedFactory(this.userAccountService)
]]
});
}
sendActivationInformation() {
this.submitted = true;
if (this.activationInformationForm.valid) {
this.userAccountService.sendActivationInformation(this.activationInformationForm.value)
.subscribe(() => this.router.navigate(['/sendactivationinformation/success']));
}
}
}
, который использует два валидаторов синхронизации и два асинхронных валидатор, указанных в двух массивах.
По какой-то причине следующей асинхронной валидатор всегда указывает на ошибку проверки:
export function validateUserAccountNonActivatedFactory(userAccountService: UserAccountService): {[key: string]: any} {
return (control: AbstractControl) => {
return userAccountService.userAccountAlreadyActivated(control.value)
.map(alreadyActivated => alreadyActivated ? {userAccountNonActivatedValidator: {alreadyActivated: true}} : null);
};
}
... или не возвращает false
или true
вызов бэкенд.
FYI, userAccountAlreadyActivated
делает HTTP вызов внутреннего интерфейса следующим образом:
userAccountAlreadyActivated(email: string) {
let body = 'email=' + email;
return this.http.get(this.urls.USER_ACCOUNT.ALREADY_ACTIVATED + body);
}
Я подозреваю, что проблема связана с тем, как я указываю массив проверки асинхронного действия, но я не уверен. – balteo
Это работает, если вы добавляете только асинхронные валидаторы или даже только один асинхронный валидатор? –
Нет. Вы правы, валидатор не работает сам по себе (я прокомментировал первый валидатор). И ошибочно, вернётся ли «true» или «false» из бэкэнда ... – balteo