Хорошо, я понял, не уверен, что это лучшее решение.Это работало все же.Я использовал lodash для этого.По сути, идея состоит в том, чтобы создать массив, который является исходной копией области, которую вы пытаетесь отследить на предмет изменений, а затем сравнить исходный массив с текущим массивом, с которым пользователь может изменять данные, и затем найти разницу.
Пример:
originalUsers:
[
{"firstName": "John", "lastName": "Smith" },
{ "firstName": "Jane", "lastName": "Smith" },
]
HTML:
<your_respective_table *ngFor="let user of users">
<input type="text" [(ngModel)]="user.lastName">
</your_respective_table>
Допустим, пользователь изменяет firstName на John Smith на John Doe
UsersArray будет выглядеть следующим образом:
[
{"firstName": "John", "lastName": "Doe" },
{ "firstName": "Jane", "lastName": "Smith" },
]
Typescript (ваш компонент):
import { cloneDeep as _cloneDeep, differenceWith as _differenceWith, isEqual as _isEqual } from 'lodash';
.... // Component declaration
....
// where ever your getting or subscribing to your array after when the stream is complete
this.originalUsers = _cloneDeep(this.users);
...
...
getChanges() {
let changedUsers = [];
changedUsers = _differenceWith(this.users, this.originalUsers, _isEqual);
}
Ожидаемый вывод getChanges () даст только объекты пользователя внутриизмененный массив пользователей, поэтому в этом случае выходные данные будут такими:
changeUsers = [{"firstName": "John", "lastName": "Doe"}]
Сохранить впомните, что порядок имеет значение для _differenceWith, когда вы передаете массивы в качестве аргументов методу.Вы хотите сохранить массив для отслеживания в качестве первого аргумента и исходную копию массива в качестве второго аргумента.
Надеюсь, это поможет кому-нибудь в будущем.