2017-12-08 16 views
2

名前が一意であるかどうかを検証するためにサービスに呼び出す必要がある反応型のカスタム非同期バリデータがあります。注入されたプロバイダによる角度非同期フォームの検証

バリデータは純粋な関数なので、HTTPなどのプロバイダを注入してこれらの呼び出しを行うのは良い方法ではないようです。

私は現在サービスを渡しますが、これはハック少しを感じている機能を返してきたコード...

export function nameValidator(platformService: PlatformService): ValidatorFn { 
    return (control: FormControl): { [key: string]: any } => { 
     return userService.getUnique(control.value) 
    }; 
} 

私の質問は、より良い方法はありますか?

答えて

2

テンプレート内でディレクティブとして使用される場合、バリデータはdirective classesに注入可能です。

それらはFormControl又はFormBuilder

で直接指定されているとき、彼らは彼らがuseFactory又はuseClassプロバイダであり、コンポーネントに注入する必要がありDIを利用するために機能することが期待される:

@Injectable() 
class NameValidator implements AsyncValidator { 
    constructor(private userService: UserService) {} 

    validate = (control: FormControl) => this.userService.getUnique(control.value); 
} 

... 

new FormControl('', nameValidator.validate); 

validateメソッドはコールバックとして渡され、矢印またはbindのクラスインスタンスにバインドする必要があります。

関連する問題