Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ag网格:运行时自动调整列大小在chrome/IE 11中不起作用_Javascript_Angular_Settimeout_Ag Grid_Ag Grid Angular - Fatal编程技术网

Javascript Ag网格:运行时自动调整列大小在chrome/IE 11中不起作用

Javascript Ag网格:运行时自动调整列大小在chrome/IE 11中不起作用,javascript,angular,settimeout,ag-grid,ag-grid-angular,Javascript,Angular,Settimeout,Ag Grid,Ag Grid Angular,我在angular framework中使用Ag grid,在初始加载数据后,我将动态应用分组(行分组),然后我将尝试扩展所有组,一旦网格分组并扩展行,我希望自动调整列大小,以避免显示省略号(值…) 在下面的文章中,我复制了这个问题。我看到在分组之后,我使用hack setTimeout函数来展开/折叠或自动调整它工作的列的大小 我不想使用这种骇人的方法,因为我不知道确切的行数(数据),所以在某些情况下setTimeout将不起作用 另外,它在IE11中非常慢,并且可能需要更多的超时值 onG

我在angular framework中使用Ag grid,在初始加载数据后,我将动态应用分组(行分组),然后我将尝试扩展所有组,一旦网格分组并扩展行,我希望自动调整列大小,以避免显示省略号(值…)

在下面的文章中,我复制了这个问题。我看到在分组之后,我使用hack setTimeout函数来展开/折叠或自动调整它工作的列的大小

我不想使用这种骇人的方法,因为我不知道确切的行数(数据),所以在某些情况下setTimeout将不起作用

另外,它在IE11中非常慢,并且可能需要更多的超时值

onGridReady(params) {
    this.gridApi = params.api;
    this.gridColumnApi = params.columnApi;

    this.http
      .get(
        "https://raw.githubusercontent.com/ag-grid/ag-grid/master/packages/ag-grid-docs/src/olympicWinnersSmall.json"
      )
      .subscribe(data => {
        data[0].athlete = 'very very very long text very very very long text very very very long text very very very long text'
        this.rowData = data;
         this.gridColumnApi.addRowGroupColumns(["sport", "year", "country", "athlete"]);

        // This will not work
        // this.setDefaultExpanded();

        // This will work (hacky solution)
        setTimeout(() => {
          this.setDefaultExpanded();
        }, 1000);

        // This will not work
        // this.autoSizeAll();

        // This will work (hacky solution) 
        setTimeout(() => {
           this.autoSizeAll();
        }, 2000);

      });
  }



 setDefaultExpanded() {
    this.gridApi.forEachNode(node => {
        if (node.group) {
            node.expanded = true;
          }
        });
        this.gridApi.onGroupExpandedOrCollapsed();
  }


  autoSizeAll() {
      const allColumnIds = [];
      if (this.gridColumnApi) {
        this.gridColumnApi.getAllDisplayedColumns().forEach(column => {
          allColumnIds.push(column.colId);
        });
        this.gridColumnApi.autoSizeColumns(allColumnIds);
      }

  }
感谢您的帮助


谢谢

请使用onFirstDataRendered事件。一旦数据加载到网格中,就会触发此操作

var gridOptions = {
    defaultColDef: {
        resizable: true
    },
    columnDefs: columnDefs,
    rowData: null,
    onFirstDataRendered: onFirstDataRendered
};

function onFirstDataRendered(params) {
    const allColumnIds = [];
  if (this.gridColumnApi) {
    this.gridColumnApi.getAllDisplayedColumns().forEach(column => {
      allColumnIds.push(column.colId);
    });
    this.gridColumnApi.autoSizeColumns(allColumnIds);
  }
}

尝试在代码settimeout(function(){this.gridColumnApi.autoSizeColumns(allColumnIds);},200)中使用settimeout。我很久以前就工作过,但每当遇到这样的问题时,都会使用timeout函数,但我不确定这是否是一个好的做法。请确认它是否有效谢谢您的回复,但我已经尝试过了,我不想使用这个黑客(setTimeout),我几乎尝试了ag grid firstDataRendered、modelUpdated、rowDataChanged、rowDataUpdated的所有事件。这里的问题是在展开/折叠操作之前调用autosize,因为它对forEachNode进行异步回调。而且在我的例子中,网格每5秒钟就会刷新一次,所以在这样的事件中自动调整大小的成本会更高。你也可以在Github发布问题。很抱歉,我找不到fixsure将联系ag网格社区,但感谢您的回复