Angular 2 ngModelChange old value
This might work
(ngModelChange)="onModelChange(oldVal, $event); oldVal = $event;"
or
(ngModelChange)="onModelChange($event)"
oldValue:string;onModelChange(event) { if(this.oldValue != event) { ... } this.oldValue = event;}
Just for the future
we need to observe that [(ngModel)]="hero.name" is just a short-cut that can be de-sugared to: [ngModel]="hero.name" (ngModelChange)="hero.name = $event".
So if we de-sugar code we would end up with:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
or
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
If you inspect the above code you will notice that we end up with 2 ngModelChange events and those need to be executed in some order.
Summing up: If you place ngModelChange before ngModel, you get the $event as the new value, but your model object still holds previous value.If you place it after ngModel, the model will already have the new value.
Sample stack blitz:https://stackblitz.com/edit/angular-ivy-zlhwex
Example with input field...
<div *ngFor="let value of values">{{value}} <input [(ngModel)]="value" (focus)="old=value" (ngModelchange)="doSomething(old, value)"></div>doSomething(oldVal, newVal) { // some code}