destus,
получается previousValue это глобальная, и она будет меняться в зависимости от того на кого ты фокусишься.
Если мы допустим поменяем значение и не засабмитим его, при этом сменим фокус на другой инпут, мы потеряем previousValue прошлого инпута.
Смотрите у меня такая вот бредятина получается:
<ng-template pTemplate="body" let-rowData let-columns="columns">
<tr [style.background-color]="(rowData.hasOwnProperty('color')) ? rowData['color'] : 'white'">
<td *ngFor="let col of databaseStructure.columns">
<span *ngIf="!editable">{{rowData[col.field]}}</span>
<input type="text"
[(ngModel)]="rowData[col.field]"
*ngIf="editable"
class="editInput"
(keypress)="setValue($event,rowData['id'],col.field,rowData[col.field])"
(focus)="previousValue=rowData[col.field]"
>
</td>
</tr>
</ng-template>
Ели editable, то я показываю инпуты. В них инфа если меняется и сабмитится то я проверяю ее на сервере и в зависимости от валидности или применяю ее на клиентской части или возвращаю на предыдущее значение. Так же если мы не поменяли и не засабмитили то тоже надо вернуть на предыдущее значение.