【问题标题】:AG-Grid custom filter (Angular) - how to get row data inside OnNewRowsLoaded()AG-Grid 自定义过滤器 (Angular) - 如何在 OnNewRowsLoaded() 中获取行数据
【发布时间】:2021-07-29 00:34:53
【问题描述】:

目前正在为 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() 来获取过滤器中网格的状态,所以我的问题如下:

  1. 是否预期 rowModel.forEachNode() 在 onNewRowsLoaded() 方法内不能正常工作?
  2. 如果我不能依靠此处的 rowModel.forEachNode() 来确定新添加的行,是否还有其他方法可以做到这一点?

【问题讨论】:

  • 更新:事实证明这是 AG-Grid 方面的一个错误,并且已经提出了一个问题。当它看起来已经修复/取得进展时会更新。
  • 更新更新:所需的功能可以通过另一种方法来实现,所以它技术上不是错误。解决方案已在下方发布。

标签: angular ag-grid ag-grid-angular


【解决方案1】:

修复:

事实证明,如果我们想要遍历 onNewRowsLoaded() 方法内的现有行,我们应该使用this.params.rowModel.forEachNode()

相反,我们应该使用:

this.params.api.forEachLeafNode()

解释:

这是因为params.rowModel.forEachNode() 依赖于现有的组/过滤器数据,因此在过滤器方法中调用它会导致一些问题,从而导致方法静默失败。值得庆幸的是,params.api.forEachLeafNode() 不依赖于组或过滤器,所以我们很适合在这种情况下使用它。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2016-01-22
    • 2017-09-18
    • 2016-09-20
    • 2019-03-21
    • 2017-09-18
    • 2021-05-07
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多