AG-Grid 自定义过滤器 (Angular) - 如何在 OnNewRowsLoaded() 中获取行数据
AG-Grid custom filter (Angular) - how to get row data inside OnNewRowsLoaded()
目前正在为 AG-Grid 开发自定义过滤器,它的大部分工作正常,除了加载新行时。我希望能够看到加载了哪些行,以便更新其中的数据自定义过滤器。我试过使用 IFilterParams.rowModel.forEachNode(),但无济于事。这是我所看到的内容的要点:
export class MyCustomFilter implements IFilterAngularComp {
// (...)
agInit(params: IFilterParams): void {
this.params = params;
}
onNewRowsLoaded() {
console.log("new_rows_loaded_start");
this.params.rowModel.forEachNode((n) => {
console.log("test");
});
console.log("new_rows_loaded_end");
}
// (...)
}
加载一些新行后,我在控制台输出中看到了以下内容:
new_rows_loaded_start
new_rows_loaded_end
注意那里没有任何“测试”条目。如果我在其他任何地方(在 onNewRowsLoaded() 方法之外)执行 params.rowModel.forEachNode() ,它会打印出适当数量的“测试”条目。我一直依赖 forEachNode() 来获取过滤器内的网格状态,所以我的问题如下:
- 是否预计 rowModel.forEachNode() 在 onNewRowsLoaded() 方法内部无法正常工作?
- 如果我不能依赖这里的 rowModel.forEachNode() 来确定新添加的行,是否有另一种方法可以做到这一点?
修复:
事实证明,如果我们想遍历 onNewRowsLoaded()
方法中的现有行,我们应该 NOT 使用 this.params.rowModel.forEachNode()
相反,我们应该使用:
this.params.api.forEachLeafNode()
解释:
这是因为 params.rowModel.forEachNode()
依赖于现有的组/过滤器数据,因此在过滤器方法中调用它会导致一些问题,导致该方法静默失败。值得庆幸的是,params.api.forEachLeafNode()
不依赖于组或过滤器,因此我们可以在这种情况下使用它。
目前正在为 AG-Grid 开发自定义过滤器,它的大部分工作正常,除了加载新行时。我希望能够看到加载了哪些行,以便更新其中的数据自定义过滤器。我试过使用 IFilterParams.rowModel.forEachNode(),但无济于事。这是我所看到的内容的要点:
export class MyCustomFilter implements IFilterAngularComp {
// (...)
agInit(params: IFilterParams): void {
this.params = params;
}
onNewRowsLoaded() {
console.log("new_rows_loaded_start");
this.params.rowModel.forEachNode((n) => {
console.log("test");
});
console.log("new_rows_loaded_end");
}
// (...)
}
加载一些新行后,我在控制台输出中看到了以下内容:
new_rows_loaded_start
new_rows_loaded_end
注意那里没有任何“测试”条目。如果我在其他任何地方(在 onNewRowsLoaded() 方法之外)执行 params.rowModel.forEachNode() ,它会打印出适当数量的“测试”条目。我一直依赖 forEachNode() 来获取过滤器内的网格状态,所以我的问题如下:
- 是否预计 rowModel.forEachNode() 在 onNewRowsLoaded() 方法内部无法正常工作?
- 如果我不能依赖这里的 rowModel.forEachNode() 来确定新添加的行,是否有另一种方法可以做到这一点?
修复:
事实证明,如果我们想遍历 onNewRowsLoaded()
方法中的现有行,我们应该 NOT 使用 this.params.rowModel.forEachNode()
相反,我们应该使用:
this.params.api.forEachLeafNode()
解释:
这是因为 params.rowModel.forEachNode()
依赖于现有的组/过滤器数据,因此在过滤器方法中调用它会导致一些问题,导致该方法静默失败。值得庆幸的是,params.api.forEachLeafNode()
不依赖于组或过滤器,因此我们可以在这种情况下使用它。