Angular Slickgrid v7.7.0 运行时修改GridOptions.Presets.Columns的异常问题
Angular Slickgrid v7.7.0 运行时修改GridOptions.Presets.Columns的异常问题
嗨,我来帮你捋捋这个问题哈!你遇到的情况应该是:点击按钮动态给表格加列后,想让原来显示的列保持不变,新添加的列默认隐藏但能在列选择器里找到,但现在调用changeColumnsArrangement()之后,新列直接从表格和列选择器里都消失了对吧?
问题出在哪?
你之前的写法应该是直接修改了gridOptions.presets.columns,然后调用changeColumnsArrangement()来应用配置,但这里有个关键:presets是表格的初始配置项,运行时直接修改它再调用changeColumnsArrangement(),这个方法会严格按照你传入的预设列集合来重置表格列——如果预设里没有新添加的列,自然会被直接移除,这就是为什么新列不见了的原因。
正确的解决思路
我们要做的是:更新当前的列定义集合(而不是初始预设),给新列设置默认隐藏属性,同时保留原有列的显示状态,最后用官方API同步到表格上。
具体代码示例
假设你已经有了当前的列定义数组(比如this.columnDefinitions),可以这么写:
// 1. 定义你要添加的新列,关键要设置hidden: true,这样默认隐藏但会出现在列选择器里 const newDynamicColumn: Column = { id: 'dynamicNewCol', name: '新添加的列', field: 'dynamicNewField', hidden: true, // 核心配置:默认隐藏 // 其他你需要的列配置,比如宽度、格式化器等 }; // 2. 合并原有列和新列,注意要保留原有列的所有状态(比如之前的hidden、宽度等) this.columnDefinitions = [...this.columnDefinitions, newDynamicColumn]; // 3. 用Angular-Slickgrid的官方API更新列定义,这一步会自动保留原有列的显示状态,新列默认隐藏 this.angularGrid.gridService.updateColumnDefinitions(this.columnDefinitions); // 如果你之前有保存列布局的需求,也可以用这个API确保状态同步 // this.angularGrid.gridService.setColumns(this.columnDefinitions);
为什么不用changeColumnsArrangement()?
这个方法的作用是应用预设的列布局(比如预设哪些列显示、隐藏、顺序),它是基于你传入的列集合来重置的,如果你传入的集合里没有新列,就会把新列删掉。所以动态加列的场景下,应该先更新列定义,再让表格同步,而不是用这个方法来“重置”布局。如果之后你需要恢复某个预设布局,再用changeColumnsArrangement()才是正确的场景。
备注:内容来源于stack exchange,提问作者BHudson
相关产品推荐
相关产品推荐

