Angular 使用 dtTrigger 重新加载数据表

Angular Datatables reload with dtTrigger

我在我的一个项目中使用 Angular 数据table。我显示数据,然后单击按钮我必须重新加载数据。我有以下设置:

在.html

<table datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" class="table table-hover table-responsive"
    style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Group</th>
            <th>Weight</th>
            <th>Control Valves</th>
            <th>Zones</th>
            <th>Decks</th>
            <th></th>
        </tr>
    </thead>
    <tbody *ngIf="roomsList?.length != 0">
        <ng-container *ngFor="let room of roomsList; let id = index">
            <tr *ngIf="room.visibility">

                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
                <td>
                    <!- Some code -->
                </td>
            </tr>
        </ng-container>

    </tbody>
    <tbody *ngIf="roomsList?.length == 0">
        <tr>
            <td colspan="3" class="no-data-available">Loading...</td>
        </tr>
    </tbody>
</table>

在我的 .ts 文件中:

dtOptions: DataTables.Settings = {};
dtTrigger: Subject<any> = new Subject<any>();

async ngOnInit() {
  
  this.dtOptions = {
    
    columnDefs:[
      {
        targets: 0,
        width: "20%"
      }
    ],
    ordering: false,
    paging: true,
    responsive:true,
    searching: false,
    
  };

  this.roomsList = //some api call to get data;
  this.dtTrigger.next();
}

async onSave(event){

  this.roomsList = //some api call to get data;
  this.dtTrigger.next();
  console.log(this.roomsList);
  console.log(request);
}

当我使用 this.dtTrigger.next(); 执行此操作时,出现以下错误:

当我评论 this.dtTrigger.next(); 时,我没有得到错误,但我认为发生了什么,旧数据仍然存在,新数据被呈现,分页消失,所有 500+行出现在 table.

我读过这个 dtTrigger.next() 函数,手动重新渲染 table,但在我的情况下它给了我一个错误。

有人可以指教,我可能做错了什么吗?

如果需要更多信息,我可以提供!

此致,

朱利安

我在打开的 github 问题的答案中找到了解决方案。 解决方案就在这个 link:

    this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {
      // Destroy the table first
      dtInstance.destroy();
      // Call the dtTrigger to rerender again
      this.dtTrigger.next();
    });

我必须获取 table 实例并销毁它,然后再重新渲染 table。

此致,

朱利安