このテンプレートでは:
<label for="condition">Condition</label>
<input type="range" min="0" max="4" name="condition"
[(ngModel)]="vehicle.condition">
<span>{{vehicle.condition | condition}}</span>
数値を人間が読める文字列に変換することになっているカスタムパイプを介して、レンジスライダーの数値出力を補間しています:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'condition',
pure: false
})
export class ConditionPipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 0: return 'Damaged';
case 1: return 'Rough';
case 2: return 'Average';
case 3: return 'Clean';
case 4: return 'Outstanding';
}
}
}
このパイプを使用すると、 の初期値に対してのみ適切な出力が得られますvehicle.condition
。(スライダーをドラッグして) モデルを更新するとすぐに、補間が消えます。補間された式からパイプを削除すると、期待どおりに機能します。変更時に数値が更新されます。
switch
これをクラスメソッドまたはコンポーネントメソッドに入れると、同じ結果が得られます。
<label for="condition">Condition</label>
<input type="range" min="0" max="4" name="condition"
[(ngModel)]="vehicle.condition">
<p>numeric: {{vehicle.condition}}</p>
<p>pipe: {{vehicle.condition | condition}}</p>
<p>class method: {{vehicle.niceCondition(vehicle.condition)}}</p>
<p>component method: {{niceCondition(vehicle.condition)}}</p>
プロデュース:
この switch ステートメントで処理されたときに補間が更新されないのはなぜですか?