2016-12-08 5 views
3

Возможно, я ошибаюсь, потому что я делаю что-то простое, но мои решения очень подвержены ошибкам.Angular2 получить полное значение ввода при нажатии или нажатии клавиши

Все, что я хочу сделать, это выполнить фильтр на стороннем компоненте при изменении ввода текста (при нажатии клавиши).

первого подхода, который не работал:

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

проблема заключается в том, что ключ вниз выполняется перед NameFilter обновляется с последними символами, поэтому мой фильтр один символ за

второго захода на посадку что не работает

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, если смогу.

Есть ли еще одно событие? или лучший способ получить это значение, включая последний ключ? (Я не хочу ждать ключа вверх или введите)

обновление это работает отлично

<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

спасибо, но я стараюсь не изобретать колесо. это простой сценарий, который, я уверен, покрыт между событиями angular2 и dom –

+1

Вы можете попробовать 'ngModelChange' вместо' keydown' –

ответ

5

Вы можете использовать (ngModelChange)="...".

(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

Смежные вопросы