2017-07-04 6 views
0

offerCheckバリデーターにハードコードされた値を渡すとうまくいきます。しかし、私がAPIから値を取得する場合、null値がパラメータで渡されています。フォームはサービスから値を取得する前に実行されています。 apiから値を取得した後、検証チェックを行うのを手伝ってください。何をしたい値を取得した後にangular2カスタムバリデーターを実行する方法

this.newOffer = "aaa"; 
 
this.oldOffer = "aaa"; 
 

 
constructor(fb: FormBuilder) { 
 
    this.formGroup = fb.group({ 
 
     'offer': [null, Validators.compose([Validators.required, this.offerCheck(newOfer, oldOffer)])], 
 
    }) 
 

 
    offerCheck(new, old) { 
 
     return (control: FormControl) => { 
 
     if (new == old) { 
 
      return true; 
 
     } 
 
     } 
 
    }

+0

どこから値を取得しますか? – Chrillewoodz

+0

私はonInit関数の値をサブスクライブしています。 (; } 結果=> { this.newOffer = result.new)私が加入値を渡す前offercheckバリデータは、ngOnInit(){ this.serviceSubscription = this.offerService.getOffers.subscribe実行gettignれます。 } – User1

答えて

0

おそらくAsyncValidatorFnあり、ここでは1を作成する方法の非常に単純な例です:

export const OfferCheck: AsyncValidatorFn = (control: AbstractControl): Observable<boolean> => { 

if (new == old) { 
    return Observable.of(this.http.get('/some-endpoint').first().map(res => res.data)); 
} 
}; 

これはちょうどあるので、あなたは十分な情報を提供していません。あなたはそれが欲しいと思う方法を推測します。しかし、それは正しい判断であなたを指すべきです。

別の方法を使用すると、データをフェッチした後コントロール(複数可)のsetValidators使用することです:

this.formGroup.get('offer').setValidators([Validators.required, this.offerCheck(newOfer, oldOffer)]); 

私はこのことができます願っています。

+0

setValidatorsが私のために働いていました。ありがとうございました 。 – User1

関連する問題