I am using Angular Datatables to show some tabular data. I have added an *ngIf condition to the table, so that it will not be visible until the data is loaded completely. The table code looks like the following :
<table class="table" id="releaseDatatable" datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" *ngIf="!loading">
The loading variable I am setting from my component and then calling this.dtTrigger.next(). I have the following code to set loading.
set loading(loading: boolean) {
this._loading = loading;
setTimeout(()=>{
this.dtTrigger.next();
}, 100);
}
Now for the first time, everything is working fine. But when I try to re-load the table (after edit or delete), it it is showing the following error :
ERROR ObjectUnsubscribedErrorImpl {message: "object unsubscribed", name: "ObjectUnsubscribedError"}
and this.dtTrigger has null as observers. How this can be fixed ? I tried to re-render the table, but it is also not working.
You can use [ngClass] and hide rather than using ngIf
<table class="table" id="releaseDatatable" datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" [ngClass]="loading">
in component make loading attribute as "hide" or "show";
in css hide it
.hide{
display:none;
}
For render again I use destroy and and trigger next
import
import { DataTableDirective } from 'angular-datatables';
@ViewChild(DataTableDirective, {static: false})
datatableElement: DataTableDirective;
to render
rerender(){
this.datatableElement.dtInstance.then((dtInstance: DataTables.Api) => {
dtInstance.destroy();
this.dtTrigger.next();
});
}
call this rerender method
set loading(loading: boolean) {
setTimeout(()=>{
this.rerender();
}, 100);
}
This is a known problem with how Angular Datatables re-renders
You can find more details and workarounds from the GitHub issues list e.g. https://github.com/l-lin/angular-datatables/issues/1241
Some of the comments suggest using [hidden] instead of *ngIf
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With