データベースから取得したデータを表示するテーブルを作成しました。データをフェッチするTS部分は次のようになります。
_this._appService.getVisitData().subscribe((data) => {
this.checkinTemp = data;
// Calling the DT trigger to manually render the table
this.dtTrigger.next();
});
_
テーブルが生成され、編集および削除機能、ビューコードを追加しました。
_<table datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" class="row-border hover">
<thead>
<tr>
<th>ID</th>
<th>Visitor Name</th>
<th>Department</th>
<th>Purpose</th>
<th>Schedule Date Time</th>
<th>Entry Source</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of checkinTemp">
<td>{{data.id}}</td>
<td>
<a (click)="viewCheckinData(data)"> {{data.f_name}} {{data.l_name}} </a>
<span>
<a (click)="editCheckinData(data)">Edit</a>
<a (click)="confirmDelete(data)">Delete</a>
</span>
</td>
<td>
<span *ngIf="data.department == null || data.department == ''">N/A</span>
<span *ngIf="data.department !== null ">{{data.department}}</span>
</td>
<td>
<span *ngIf="data.purpose == null || data.purpose == ''">N/A</span>
<span *ngIf="data.purpose !== null ">{{data.purpose}}</span>
</td>
<td>{{data.pre_check_in | date:'short'}}</td>
<td>{{data.creator_id}}</td>
</tr>
</tbody>
</table>
<p-confirmDialog header="Confirmation" icon="fa fa-question-circle" width="425"></p-confirmDialog>
_
ここで、ユーザーが削除を押すと、confirmDelete(data)
が呼び出されます。 TSファイル内の関数:
_confirmDelete(item) {
this.confirmationService.confirm({
message: 'Are you sure you want to delete this Visitor?',
header: 'Confirmation',
accept: () => {
this._appService.deleteCheckin(item.id).subscribe(res => {
// Splice Or something so the page doesnt reload but the data gets removed from the view.
this.flashMsg.flashMsg('success', 'Deleted', 'Visitor has been deleted.');
},
err => {
this.flashMsg.flashMsg('error', 'Error', 'Visitor has not been deleted.');
});
},
reject: () => {
},
});
}
_
これまでデータを削除すると、データが削除されて確認メッセージがポップアップ表示されますが、ページが再読み込みされるまでデータはビューに表示されたままです。ページを読み込まずにテーブルからデータを削除する方法はありますか?スプライスを調べましたが、コードでそれを使用することができませんでした。
サーバーからアイテムを正常に削除した後、次のようにsplice(...)
を使用して配列からアイテムを削除できます。
const index = this.checkinTemp.indexOf(item);
this.checkinTemp.splice(index, 1);