2017-10-20 20 views
0

私は、日付が特定の最小日付を超えているかどうかをチェックするカスタムバリデータを作成しました。私はバリデータが適用されているが、私はバリで私の分の値をconsole.log()時にいることがわかります。この角4 - 動的パラメータ値を持つカスタムバリデータ

this.definitionForm = this.fb.group({    
     "from": [this.details.From, Validators.required], 
     "to": [this.details.To, [Validators.required, validateMinDate(this.details.From)]] 
    }); 

ように私のフォームをinitate

export function validateMinDate(min: Date): ValidatorFn { 
    return (c: AbstractControl) => { 

     if (c == null || c.value == null) 
      return null; 

     let isValid = c.value >= min; 
     if (isValid) { 
      return null; 
     } else { 
      return { 
       validateMinDate: { 
        valid: false 
       } 
      }; 
     } 
    }; 
} 

のコードは次のようになります私はそれがnullと等しいことがわかります。私は、フォームを開始するとき、私は、パラメータは、動的ではなく、フォームが設​​定されているときだけ値をとるヌルで

this.details.From開始を想定しますか?

ユーザーが開始日を選択したときに最小日付が更新されていることを確認して、this.details.Fromの値を変更するにはどうすればよいですか?

+0

バリデーターをディレクティブとして使用して、最新のthis.details.Fromで更新できるサービスを挿入しようとするとよいでしょう。 –

+1

あなたがしなければならないことは、 'From'日付を見ることです、毎回の変更でバリデーターをコントロール' to'にリセットする必要があります、あなたは日付ピッカーを使用していますか?または単純な入力だけです。 ? –

答えて

1

フォームグループにバリデータを適用する方法、または大きなフォームを使用する場合は、fromtoの入れ子になったグループを作成し、バリデータを適用することをお勧めします。バリデーターが発生するたびにバリデーターが起動されます。だから、このようにバリデータを更新し、formgroupことを意味します:

this.definitionForm = this.fb.group({    
    "from": [this.details.From, Validators.required], 
    "to": [this.details.To, [Validators.required]] 
}, {validator: validateMinDate()}); 

export function validateMinDate(): ValidatorFn { 
    return (c: AbstractControl) => { 
     if(c) { 
     let isValid = c.get('to').value >= c.get('from').value; 
     if (isValid) { 
      return null; 
     } else { 
      return {validateMinDate: true}; 
     } 
     } 
    }; 
} 

もちろん有効でない場合は、setErrorsを使用し、そこに他のオプションは、このような変更イベントをリッスンとして、同様であり、その後、日付のチェックを行いますフォーム上に。

+0

これは彼が尋ねたものではありません... – ConquerorsHaki

+0

@ConquerorsHaki私の答えは「どうやって見たら...」から始まります。これはカスタムバリデーターを見た目に変更する方法です。 – Alex

関連する問題