Angular2 ngModelChange 以前的值

Angular2 ngModelChange previous value

有没有办法在 ngModelChange 上获取字段的前一个(最后一个)值? 我有这样的东西

HTML

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

处理程序

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

我得到的是

changed *newvalue* *newvalue*

当然我可以使用另一个变量来保留旧值,但是有更好的方法吗?

你能做的是,

演示: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 
}

所以发现有点奇怪(至少对我而言)可能的解决方案,并且对相关代码的更改最少。因此,在 [(ngModel)] 之前分配 (ngModelChange) 属性时,我得到的是相同的处理程序:

changed *older value* *new value*

我在 this.text 中得到了新值,就像这样:

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

你需要做的就是把 (ngModelChange)="textChanged($event)" html 标签中 [(ngModel)] 元素的左侧,例如:

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

这样,在 textChanged(event) 中,您绑定的元素仍然具有以前的值,而 event 是新的

如果你输入

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

将仅使用新值调用该事件。然而:

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

将为您提供具有先前值和当前值的事件

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

这样就可以知道上一个值和下一个值

这对我有用。

<input
   [(ngModel)]="actionInputValue"
   (keydown)="prevValue = actionInputValue"
   (keyup)="doSomething()"
/>

现在在组件 ts 文件中,您可以控制和检查值。

doSomething() {
  console.log(this.prevValue, this.actionInputValue);
}

想法是 keydown 事件发生在 ngModel 更新之前。