通过setColumnDefs设置新的列定义不再起作用

Dan*_* C. 5 ag-grid ag-grid-angular

我试图通过使用网格API调用setColumnDefs来设置新的列定义。这不符合预期。列标题的名称将不再更新!

参见此Plunkr:19.1.x版

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

看到这个Plunkr:版本19.0.0

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

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

Ale*_*den 7

我能够重现您的行为。以下(脏)变通办法起作用:

  gridOptions.api.setColumnDefs([]);
  gridOptions.api.setColumnDefs(newColDefs);
Run Code Online (Sandbox Code Playgroud)

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


un.*_*ike 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);
}
Run Code Online (Sandbox Code Playgroud)

它将按预期工作。

更新:

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

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

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

更改来自19.1 版本发布

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