angular - 在两个单独的 ag-Grid 上使用 ag-Grid 的 sizeColumnsToFit() 时出现警告 'grid zero width',由选项卡菜单显示

标签 angular tabs ag-grid ag-grid-ng2 ag-grid-angular

调整 ag-Grid 的大小(更改浏览器窗口的大小)并在两个选项卡之间切换时收到以下警告:

ag-Grid: tried to call sizeColumnsToFit() but the grid is coming back with zero width, maybe the grid is not visible yet on the screen?



我在 Stackblitz 中重现了这种情况:

https://angular-jpmxjy.stackblitz.io/

这是测试应用程序的组成:
  • PrimeNG p-tabMenu 在组件: header.component
  • ag-Grid 在
    组件: delleverancer.component 和leverancer.component。

  • 您将在 chrome 开发工具中看到警告错误,
    当您调整网格大小并在 tabMenu 'Leverancer' 和 'Delleverancer' 之间切换时。

    你可以在这里看到代码:

    https://stackblitz.com/edit/angular-jpmxjy

    如何删除这个不需要的警告错误?

    enter image description here

    最佳答案

    这类错误通常意味着您的应用程序中存在内存泄漏。

    查看您的代码后,我注意到您如何订阅 window:resize事件

    window.addEventListener("resize", function () { ...
    

    您应该知道,即使在组件被销毁后,此订阅仍然存在。

    你可以写removeEventListenerngOnDestroy钩。但是为此,您必须保留对原始附加功能的引用。更好的方法是使用专用的 Angular @HostListener负责 removeEventListener 的装饰师在钩子(Hook)下:
    @HostListener('window:resize')
    onResize() {
      if (!this.gridApi) return;
    
      setTimeout(() => {
        this.gridApi.sizeColumnsToFit();
      });
    }
    

    Forked Stackblitz

    为了不重复自己,您可以创建如下指令:

    ag-grid-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 Example

    关于angular - 在两个单独的 ag-Grid 上使用 ag-Grid 的 sizeColumnsToFit() 时出现警告 'grid zero width',由选项卡菜单显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54038024/

    相关文章:

    angular - 无法解析 TemlComponent : (? 的所有参数。在语法错误(compiler.js:1016)

    angular - 当我执行 this.router.navigate 时,本地存储被清除

    javascript - jQuery 标签 "Undefined is Not a Function"

    angular6 - Angular 2 ag-grid 无法读取 getSelectedRow() 未定义的属性 'api'

    javascript - AG-Grid 在导出到 CSV 时跳过列

    javascript - 带有 Angular 9 的 ionic 5 : How to Print from Desktop (not mobile device)

    javascript - 重构此方法以将其认知复杂度从 21 降低到允许的 15。如何重构和降低复杂度

    java - 如何拖放同一标签面板的标签?

    android - 根据操作栏选项卡更改 Activity 内容 View

    angularjs - 自定义 ag-grid 以设置最大可选行数