Используя ответ Гюнтера Цохбауэра, я реализовал свой валидатор для доступа к службам из AsyncValidatorFn
...
IMHO кажется более чистым, позволяя DI вводить зависимости службы непосредственно в класс валидатора вместо передачи зависимостей статическому методу из потребительского компонента для создания AsyncValidatorFn
.
Создайте свой инъекционный класс валидатора
import { Injectable } from '@angular/core';
import { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';
@Injectable
export class UsernameValidator {
constructor(
private http: HttpService,
) { }
usernameExists: AsyncValidatorFn = (control: AbstractControl): Observable<ValidationErrors> => {
// access your HttpService here...
}
}
Предоставьте валидатор для внедрения в объявлении вашего модуля
@NgModule({
providers: [
UsernameValidator, // register your validator for injection
],
})
export class UserModule { }
Установите функцию валидатора в форме компонента
constructor(
private formBuilder: FormBuilder,
private usernameValidator: UsernameValidator, // inject your validator
) { }
ngOnInit() {
this.form = this.formBuilder.group({
username: [
null, // initial value
[Validators.required], // sync validators
[this.usernameValidator.usernameExists], // async validators
],
});
}
person
j3ff
schedule
12.10.2018