Почему это всегда возвращает ошибку?
export class UserExistsValidatorService implements AsyncValidator {
constructor(private userService: UserService) { }
validate(control: FormControl): Observable<ValidationErrors | null> {
return this.userService.existsUser(control.value)
.pipe(map(exists => (exists === false) ? null : {
userExists: { valid: false }
}),
catchError(() => of(null)));
}
}
Эта реализация проверки вызывает метод службы, который возвращает Observable<boolean>
existsUser(username: string): Observable<boolean> {
return this.http.post<any>(`${environment.apiUrl}/existsUser`, { username })
.pipe(map(response => response.userExists === '1'))
.pipe(catchError(this.errorHandler));
}
Я проверил, что служба работает правильно подписавшись и зарегистрировавшись для быстрого теста:
this.userService.existsUser(this.registerGrp.controls.username.value)
.subscribe(exists => { console.log(exists); });
это печатает true / false, как я ожидаю.
Однако, мой FormGroup.invalid всегда возвращает false. Кажется, что валидатор всегда срабатывает.
ngOnInit(): void {
// Formularmodell bauen
this.registerGrp = this.formBuilder.group({
username: ['', this.userExistsValidator],
password: [''],
// Confirm-Feld müsste eigentlich nicht auf required geprüft werden
// confirmPassword: [''],
confirmPassword: [''],
xboxName: [''],
discordName: [''],
accepted: [false]
});
}
console.log(this.registerGrp.invalid); // always false
Есть идеи?