2

角度2では、独自のカスタムバリデーターを作成しようとしています。Angular2カスタムバリデーター(依存関係あり)

バリデータインターフェイスを実装する独自のCustomValidatorsクラスを作成しました。

import { FormControl } from "@angular/forms"; 
import { MyhttpService } from "./myhttp.service"; 
import { Response } from "@angular/http"; 
import { Injectable, Directive } from '@angular/core'; 


@Injectable() 
export class CustomValidators{ 

constructor(private _http : MyhttpService){ 

} 

public api(c : FormControl) 
{ 
    // Run 
    this._http.get("/expenses/email?email=" + c.value).subscribe((res:Response) => { 
     if(res.status === 200){ 
      // email exists 
      return null; 
     } else { 
      return {"email" : true} 
     } 
    }); 
} 

apiを静的メソッドにすると、クラスを正常に使用できます。

this._formDetails = fb.group({ 
    "managerEmail" : ["", [Validators.required, CustomValidators.api] ] 
}); 

もちろん、これは静的メソッドなので、コンストラクタが実行されていないため、コンストラクタの値にアクセスすることはできません。

したがって、依存性を持つカスタムバリデーターを実装する方法が見つからないため、方法が必要です。

私のクラスがクラスのインスタンス化されたオブジェクトを受け取るようにCustomValidatorsをプロバイダとしてリストしてみました。

プロパティ「API」タイプに存在しません「typeof演算CustomValidators」

は、私が正しい方法でクラスを提供するのですか?なぜメソッドが存在しないのですか?

+0

私は同じ問題を解決していますか? –

答えて

0

これを試してみてください:

this._formDetails = fb.group({ 
    "managerEmail" : ["", Validators.required, CustomValidators.api] 
}); 

Validators.requiredは同期バリですが、あなたのCustomValidators.apiは非同期のバリデータです。

the official documentationごとに、各フォームコントロールは、状態、同期バリデータ、非同期バリデータで指定する必要があります。

+0

あなたの答えは間違いが含まれています 'this._formDetails = fb.group({ "managerEmail":[ ""、Validators.required]、[CustomValidators.api] });' は、あなたが何を意味するのかです。しかし、それは彼の質問に対する答えではありません。 –

関連する問題