私はしばらくの間、次の問題を抱えています。私は、数値が範囲内にあるかどうかを単に調べる角度2のカスタムバリデーターを実装しています。このように使用すると、すべて正常に動作します。angular2カスタムテンプレートバリデーターが無効な値を持っています
<input type="text" id="doseSimple" class="form-control"
required
name="doseSimple"
[(ngModel)]="doseSimple"
#doseControl ="ngModel"
validateRange
from="2"
to="20"
>
<div *ngIf="doseControl.errors && (doseControl.dirty || doseControl.touched)">
<span *ngIf="doseControl.errors.tooSmall">Too small</span>
<span *ngIf="doseControl.errors.tooBig">Too big</span>
</div>
私の場合、検証はもう少し複雑です。ドロップダウンがあります。開始値と終了値は、ドロップダウンの選択によって異なります。そこdoseFromdoseToプロパティを設定し、ドロップダウンに添付ちょうどイベントです:
<input type="text" id="name" class="form-control"
required
name="doseComplex"
[(ngModel)]="doseComplex"
#doseComplexControl ="ngModel"
validateRange
[from]="doseFrom"
[to]="doseTo"
>
<div *ngIf="doseComplexControl.errors && (doseComplexControl.dirty || doseComplexControl.touched)">
<span *ngIf="doseComplexControl.errors.tooSmall">Too small</span>
<span *ngIf="doseComplexControl.errors.tooBig">Too big</span>
</div>
バリデータが値を検証しますが、しかし、前に選択からからとと。 fromとtoの値は、一歩後ろのようなものです。それを修正するには?それは働いてないし、私はregisterOnValidatorChange
メソッドを実装し https://plnkr.co/edit/C0sbL8pRwsZcEZ5r1ODY?p=preview
それだけで罰金 –
残念なことに:(しないだろう。テキストボックスに新しい値を入力すると、正常に動作します。しかし、ドロップダウンで別の範囲が選択されると、バリデーターは古い範囲を持ちます。 doseControl.updateValueAndValidity()が(コンポーネント内で)呼び出されると、バリデータはまだ新しい値を取得しませんでした。どのように私はdoseControl.updateValueAndValidity()を呼び出す前にバインディングを強制的に更新することができます。 – yonexbat