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

时间:2018-12-03 21:26:09

标签: ag-grid ag-grid-angular

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

查看此Plunkr:Version 19.1.x

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

查看此Plunkr:Version 19.0.0

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

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

2 个答案:

答案 0 :(得分:3)

我能够重现您的行为。以下(肮脏的)解决方法起作用:

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

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

答案 1 :(得分:0)

我想它应该是最新版本的新的变更检测方法。

如果您要像这样更新代码:

var arrayPath = [];
console.log(singleFile.originalFilename); // '3.jpg','5.jpg','3.jpg','3.jpg','8.jpg'
console.log(singleFile.size);  // '1345','5778','1345','1345','7777'

for(i=0; i < files.uploadFiles.length; i++){

  singleFile=files.uploadFiles[i];
  if(arrayPath.indexOf(singleFile.originalFilename) === -1){
    arrayPath.push([singleFile.originalFilename,singleFile.size,'true']);
  }else{
    console.log("some singleFiles are duplicate");
  }
}
console.log(arrayPath);

它将按预期工作。

Update:

  

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

     

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

在第一种情况下,它是对象比较,在第二种示例中(更新后)是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); } 情况。

  

更改来自19.1 version版本

     

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