9

我正在尝试通过使用网格 API 调用 setColumnDefs 来设置新的列定义。这不能按预期工作。列标题的名称将不再更新!

请参阅此 Plunkr:版本 19.1.x

版本 19.0.0 是最新的工作版本。

请参阅此 Plunkr:版本 19.0.0

对我来说,这似乎是一个错误!?

在我的项目中,我使用的是 Angular 5,我注意到了同样的行为。

4

2 回答 2

17

我能够重现你的行为。以下(脏)解决方法有效:

  gridOptions.api.setColumnDefs([]);
  gridOptions.api.setColumnDefs(newColDefs);

将 columnDefs 设置为空数组,然后传递 newColDefs 似乎可以实现您想要的。

于 2018-12-13T13:59:56.083 回答
0

我想这取决于最新版本的更改检测的新方法。

如果您将这样更新您的代码:

function updateColDef()
{ 
    let data = [];
    columnDefs.forEach(function(colDef) { 
        colDef.headerName = colDef.headerName + ' X ';
        data.push(colDef);
  })

  data.push( {
      headerName: 'New Column',
  });

  gridOptions.api.setColumnDefs(data);
}

它将按预期工作。

更新:

设置新列时,网格将与当前列进行比较,并确定哪些列是旧的(要删除的)、新的(创建的新列)或保留的(保留的列将保持其状态,包括位置、过滤器和排序)。

列定义的比较是在 1)对象引用比较和 2) 列 ID 例如colDef.colId 上完成的。如果对象引用匹配或列 ID 匹配,则网格将列视为同一列。

在第一种情况下,它是一个对象比较,在第二个样本(更新后)它的colId情况下。

更改来自19.1版本

AG-1591 允许对列定义进行增量更改。

于 2018-12-04T10:46:37.353 回答