У меня есть это в моем Stackblitz . Это проще, чем ваш подход.
Для удаления:
// Remove the deleted row from the data table. Need to remove from the downloaded data first.
private deleteRowDataTable (recordId, idColumn, paginator, dataSource) {
this.dsData = dataSource.data;
const itemIndex = this.dsData.findIndex(obj => obj[idColumn] === recordId);
dataSource.data.splice(itemIndex, 1);
dataSource.paginator = paginator;
}
Для обновления:
// ---- UPDATE ---- Called from edit-member.component.html
private update() {
if (this.addEditForm.addEditMemberForm.valid) {
this.formValue = this.addEditForm.addEditMemberForm.value;
this.httpService.updateRecord(this.membersUrl, this.formValue)
.subscribe(
result => {
// Update the table data view for the changes.
this.updateDatatableService.updateDataTable(
result, this.recordId, this.idColumn, this.paginator, this.dataSource, this.formValue);
this.success();
},
(err: HttpErrorResponse) => {
console.log(err.error);
console.log(err.message);
this.handleError(err);
}
);
}
}
У меня нет этого для добавления, но вы поняли идею и можете добавлять строки таким же образом.
Надеюсь, это поможет.