2016-12-08 4 views
3

私は何かシンプルなことをしているので、私は間違っているかもしれませんが、私のソリューションは非常にバグがあります。Angular2は、キー入力またはキーダウン時に入力値全体を取得します

入力テキストが変更されたとき(キーダウン時)、第三者コンポーネントのフィルタを実行するだけです。動作しませんでした

最初のアプローチ:

<input type="text" placeholder="Name Fitler" [(ngModel)]="NameFilter" (keydown)="keyDown($event)" /> 

問題はNameFilterは、最新の文字で更新される前に、私のフィルタは

第二のアプローチの背後にある1つの文字であるように、キーが押されて、実行されるということですそれは動作しませんでした

keyDown(event:KeyboardEvent){ 
    var input = <HTMLInputElement>event.srcElement; 
    this.NameFilter = input.value + event.key; // <-- have to add the latest character 
    this.filterChanged(); 
} 

この種のw orksですが、バグが発生しやすいです。 input.valueには最新の文字がありませんので追加していますが、奇数キーなどについて心配する必要があります。できればkeyCodeのフィルタリングを避けたいと思います。

別のイベントはありますか?最新のキーを含むその値を取得するより良い方法ですか? (私は、キーアップを待ちたい、または入力しないでください)

更新これは完全にあなたが(ngModelChange)="..."を使用することができます

<input type="text" placeholder="Name Fitler" [(ngModel)]="NameFilter" (ngModelChange)="filterChanged()" /> 
+0

を参照してください。おかげさまで、私は車輪を再構築しないようにしていますが、これを達成しようとしています。http://stackoverflow.com/questions/37800841/input-mask-fields-in-angular2-forms/37887432#37887432 –

+0

これは簡単なシナリオですが、angle2とdomイベントの間には含まれています –

+1

'keydown'の代わりに' ngModelChange'を試してみてください –

答えて

5

に動作します。

(ngModelChange)="keyDown($event)" 

ngModelChange[(ngModel)]="NameFilter"NameFilterを更新するときに放出されます。

[ngModel]内部()は)

[ngModel]="NameFilter" (ngModelChange)="NameFilter = $event" 

のためだけの短い形式(シンタックスシュガー)である。これは、おそらく最良の方法はありませんが、それは働いていると何に似ているように思わもhttps://angular.io/docs/ts/latest/guide/template-syntax.html#!#two-way

関連する問題