34

有没有办法在 ngModelChange 上获取字段的上一个(最后一个)值?我所拥有的是这样的

HTML

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

处理程序

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

我得到的是

changed *newvalue* *newvalue*

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

4

4 回答 4

42

你能做的是,

演示: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 
}
于 2016-10-21T09:01:51.540 回答
31

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

changed *older value* *new value*

我得到这样的新值this.text

setTimeout(() => console.log(this.text), 0);
于 2016-10-21T11:42:41.857 回答
13

您需要做的就是将 (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)">   - 

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

于 2018-03-15T14:25:28.257 回答
2
<input (ngModelChange)="preTextChanged($event)" [(ngModel)]="text" (ngModelChange)="postTestChanged($event)">

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

于 2019-05-22T15:04:30.537 回答