2016-10-13 43 views
3

数値型の入力があり、onChangeイベントで値を変更しようとすると機能しません。Angular2 ngModelは、入力タイプ= "number"でバインディングを変更します

私はテキスト入力に対しても同じことを試みましたが、それは完全に機能します。

<input 
    type="number" 
    [(ngModel)]="element.value" 
    (change)="onChange($event)" 
    > 

export class NumFieldComponent { 
    @Input() index; 
    @Input() element; //element.value = 0 

    onChange($event){ 

     var confirm = confirm("Are you sure about this?") 

     if(confirm){ 
      //True, accept the value 
     } else { 
      this.element.value = 0; 
      //Failed, set the input back to 0 
     } 
    } 
} 

私はここで何が不足していますか?

PS。私はbools

+0

ログが何を働くかもしれないを取る入力で同様の問題を見たことがありますか? – Deoxyseia

+0

あなたは何を意味するのか分かりませんか? – Rob

+0

私はそれを動作させることができませんでした。私がしたのは入力を 'type =" tel "' –

答えて

0

しようとしたが、

export class NumFieldComponent { 
    @Input() index; 
    @Input() element; //element.value = 0 

    constructor(cdRef:ChangeDetectorRef) {} 

    onChange($event){ 

     var confirm = confirm("Are you sure about this?") 

     if(confirm){ 
      //True, accept the value 
     } else { 
      this.element.value = 0; 
      this.cdRef.detectChanges(); // <<<=== added 
      //Failed, set the input back to 0 
     } 
    } 
} 
+0

それはうまくいった。これは、angular2.0.0のバグの回避策ですか?または、type = "text"とtype = "number"のバインドが動作する理由がありますか? – Rob

+0

私はそれがバグだとは思わない。おそらくそれはタイミングの問題です。あなたの( '(ngModel)'や '(change)'のような複数のイベントバインディングに対して実行順序は指定されていません。 '(change)=" ... "'の代わりに '(ngModelChange)=" ... "'を使用すると、別の方法で動作するかどうか試してみることもできます。 –

+0

私は 'ngModelChange'を試しました。そしてkeypressとblurに対してイベントが発生します。数値フィールドの場合、0をバックスペーシングするか、ハイライトと上書きは、値を入力する前に発生します。それでもなぜ同じタイプのコードでtype = "text"が機能するのか理解できません。 – Rob

関連する問題