Ошибки такого рода обычно означают, что в вашем приложении есть утечка памяти.
После просмотра вашего кода я заметил, как вы подписываетесь на window:resize
событие
window.addEventListener("resize", function () { ...
Вы должны знать, что эта подписка останется там даже после уничтожения компонента.
Вы можете написать removeEventListener
в ngOnDestroy
hook. Но для этого вы должны сохранить ссылку на оригинальную прикрепленную функцию. Лучше было бы использовать специальный Angular @HostListener
декоратор, который возьмет на себя ответственность за removeEventListener
под крючком:
@HostListener('window:resize')
onResize() {
if (!this.gridApi) return;
setTimeout(() => {
this.gridApi.sizeColumnsToFit();
});
}
Разветвленный стек-блиц
Чтобы не повторяться, вы можете создать директиву, такую как:
AG-грид-resize.directive.ts
import { Directive, HostListener } from '@angular/core';
@Directive({
selector: '[ag-grid-resize]'
})
export class AgGridResizeDirective {
private gridApi;
@HostListener('window:resize')
onResize() {
if (!this.gridApi) return;
setTimeout(() => {
this.gridApi.sizeColumnsToFit();
});
}
@HostListener('gridReady', ['$event'])
onGridReady(params) {
this.gridApi = params.api;
params.api.sizeColumnsToFit();
}
}
Теперь все, что вам нужно, чтобы добавить это поведение, это добавить атрибут в вашу сетку:
<ag-grid-angular
...
ag-grid-resize <============
>
</ag-grid-angular>
Пример Stackblitz