Günter Zöchbauer's answerを使用して、これがバリデーターを実装して内部からサービスにアクセスする方法AsyncValidatorFn
です...
私見では、依存関係を消費者コンポーネントから静的メソッドに渡して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
],
});
}