Вы можете посмотреть на это по-другому. Обновлять только при фиксации. Для этого вы можете использовать канал на *ngFor
, который возвращает массив скопированных объектов. Это решение будет работать только с мелкими объектами, но вы также можете попытаться найти метод глубокого копирования (непроверенный код ниже):
труба
@Pipe({
name: 'copyArr'
})
export class CopyArrPipe implements PipeTransform {
public transform(arr: object[] = []): object[] {
return arr.map(obj => ({...obj}));
}
}
шаблон
<ng-container *ngIf="objects | copyArr as objectsCopy">
<div *ngFor="let object of objectsCopy">
<input [(ngModel)]="object.isSelected" type="checkbox">
</div>
<button type="button" (click)="cancel()">Cancel</button>
<button type="button" (click)="commit(objectsCopy)">Commit</button>
</ng-container>
компонент
@Component({...})
export class FooBarComponent {
objects = [];
cancel(){
this.objects = [...this.objects];
}
commit(newObjects) {
this.objects = newObjects;
}
}