Подтвердить что ты не робот

Angular2 ngModelИзменить предыдущее значение

Есть ли способ получить предыдущее (последнее) значение поля на ngModelChange? Что у меня есть что-то вроде этого

HTML

<input type="text" [(ngModel)]="text" (ngModelChange)="textChanged($event)">

Обработчик

private textChanged(event) {
    console.log('changed', this.text, event);
}

Я получаю

changed *newvalue* *newvalue*

Конечно, я могу сохранить более старое значение, используя другую переменную, но есть ли лучший способ?

4b9b3361

Ответ 1

Таким образом, было найдено какое-то странное (по крайней мере для меня) возможное решение для этого с минимальными изменениями в рассматриваемом коде. Итак, назначая атрибут (ngModelChange) перед [(ngModel)], что я получаю, следует с тем же обработчиком:

changed *older value* *new value*

Я получаю новое значение в this.text следующим образом:

setTimeout(() => console.log(this.text), 0);

Ответ 2

Что вы можете сделать,

DEMO: http://plnkr.co/edit/RXJ4D0YJrgebzYcEiaSR?p=preview

<input type="text" 
       [ngModel]="text"                      //<<<###changed [(ngModel)]="text" to [ngModel]="text"
       (ngModelChange)="textChanged($event)"> 

private textChanged(event) {        
    console.log('changed', this.text, event);
    this.text=event;                          //<<<###added 
}

Ответ 3

все, что вам нужно сделать, это поместить (ngModelChange) = "textChanged ($ event)" слева от элемента [(ngModel)] в теге html, например:

<input (whatever...) (ngModelChange)="textChanged($event)" [(ngModel)]="text">

Таким образом, внутри textChanged (событие) элемент, с которым вы связываетесь, по-прежнему имеет предыдущее значение, а событие - новое.

Ответ 4

<input (ngModelChange)="preTextChanged($event)" [(ngModel)]="text" (ngModelChange)="postTestChanged($event)">

Таким образом, вы можете узнать предыдущее значение и следующее значение