2017-01-24 10 views
2

入力要素に1より大きい任意の数値を入力すると、入力値が1に変わります(検証のため)。何らかの理由で、これは最初に入力した番号に対してのみ機能します。たとえば、11を入力すると、入力値が11に変わりますが、1に変わります。少なくとも、それは角度1で動作したことを覚えています。何が起きているのか?ここで入力要素のValueプロパティは一度だけ更新されます

import { Component } from '@angular/core'; 
@Component({ 
    template:` 
    <input 
    type="number" 
    (input)="validate($event.target.value)" 
    [value]="duration"> 
    <p>{{duration}}</p>` 
}) 
export class OneComponent{ 
    duration: number; 
    constructor(){ 
    this.duration = 0; 
    } 
    validate(value){ 
    if(value > 1) { 
     this.duration = 1; 
    } 
    else { 
     this.duration = value; 
    } 
    } 
} 

はあなたのコードが変更検出をだましているplunker(one.component.ts)

+0

あなたの条件は何ですか?私はあなたの最初の行を理解できませんでした。 – micronyks

+0

@micronyks、入力した値が1より大きい場合、入力要素の数値を1に変更したい0 –

答えて

1

です。この回避策では、変更検出はすべての変更を認識し、[value]="duration"バインディングを更新します。

export class OneComponent{ 
    duration: number; 
    constructor(private cdRef:ChangeDetectorRef){ 
    this.duration = 0; 
    } 
    validate(value){ 
    this.duration = -1; 
    this.cdRef.detectChanges(); 
    if(value > 1) { 
     this.duration = 1; 
    } 
    else { 
     this.duration = value; 
    } 
    this.cdRef.detectChanges(); 
    } 
} 

Plunker example

+1

私はあなたを愛しています、良い先生!あなたの時間と知識をありがとう! –

+1

あなたはウェルカムです。最後の 'detectChanges()'コールは必要ないかもしれません。イベント後、Angularは変更の検出を実行する必要があります。 –

関連する問題