带有 *ngIf 的 Angular 数据表显示错误

标签 angular datatables angular-datatables

我正在使用 Angular Datatables显示一些表格数据。我在表中添加了一个 *ngIf 条件,这样在数据完全加载之前它是不可见的。表格代码如下所示:

<table class="table" id="releaseDatatable" datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" *ngIf="!loading">

我从组件中设置的 loading 变量然后调用 this.dtTrigger.next()。我有以下代码来设置 loading

set loading(loading: boolean) {
        this._loading = loading;
       setTimeout(()=>{
            this.dtTrigger.next();
       }, 100);
    }

现在第一次一切正常。但是当我尝试重新加载表格时(编辑或删除后),它显示以下错误:

ERROR ObjectUnsubscribedErrorImpl {message: "object unsubscribed", name: "ObjectUnsubscribedError"} 

this.dtTriggernull 作为观察者。如何解决这个问题?我尝试重新渲染表格,但它也不起作用。

最佳答案

您可以使用 [ngClass] 并隐藏而不是使用 ngIf

<table class="table" id="releaseDatatable" datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" [ngClass]="loading">

在组件中将加载属性设置为“隐藏”或“显示”;

在CSS中隐藏它

.hide{
   display:none;
}

为了再次渲染,我使用了 destroy 和 trigger next

导入

  import { DataTableDirective } from 'angular-datatables';

  @ViewChild(DataTableDirective, {static: false})  
   datatableElement: DataTableDirective;

渲染

rerender(){
        this.datatableElement.dtInstance.then((dtInstance: DataTables.Api) => {
            dtInstance.destroy();
            this.dtTrigger.next();
        });       
    }

调用这个重新渲染方法

set loading(loading: boolean) {
       setTimeout(()=>{
            this.rerender();
       }, 100);
    }

关于带有 *ngIf 的 Angular 数据表显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62947315/

相关文章:

angular - 将 Observable 数据从父组件传递到使用 Angular 2+ 中的 componentFactoryResolver 创建的子组件

javascript - 数据表自定义错误处理不起作用

angularjs - Angular Datatable Set Searchable False

javascript - 使用 Angular DataTable 显示 JSON 数据

angular - 属性 'performance' 在类型 'FirebaseApp' 中缺失,但在类型 'App' 中是必需的

angular - 我可以通过@HostBinding 之外的其他方式访问主机绑定(bind)吗?

jquery - 禁用数据表中的取消选择

angular-datatables - 角度数据表 : sort non-textual data

javascript - Angular 2 单元测试 "Cannot read property ' 取消订阅未定义的“

javascript - 在 Angular Datatable 中的 jQuery ColumnFIlterWidget 插件中隐藏/删除额外的下拉小部件