我正在尝试通过使用网格 API 调用 setColumnDefs 来设置新的列定义。这不能按预期工作。列标题的名称将不再更新!
请参阅此 Plunkr:版本 19.1.x
版本 19.0.0 是最新的工作版本。
请参阅此 Plunkr:版本 19.0.0
对我来说,这似乎是一个错误!?
在我的项目中,我使用的是 Angular 5,我注意到了同样的行为。
我能够重现你的行为。以下(脏)解决方法有效:
gridOptions.api.setColumnDefs([]);
gridOptions.api.setColumnDefs(newColDefs);
将 columnDefs 设置为空数组,然后传递 newColDefs 似乎可以实现您想要的。
我想这取决于最新版本的更改检测的新方法。
如果您将这样更新您的代码:
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 允许对列定义进行增量更改。