AG Grid,使用树格式数据并按非叶节点过滤

时间:2017-05-02 17:08:49

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

我正在向网格提供树格式的数据。当我使用in列过滤器时,它将过滤器应用于叶节点,并显示需要提供叶子路径的父节点。

我正在寻找一种方法,允许用户提供快速过滤器和列过滤器。快速过滤器将过滤掉所有不包含过滤器文本的非叶节点。最终结果是用户可以使用快速过滤器过滤掉非叶节点,然后使用列过滤器过滤到叶节点。

任何想法如何实现这一目标?我意识到我可以过滤树数据并将其预先过滤到网格,但我真的需要找到一种方法来实现这一点,同时仍然将整个未过滤的树数据传递给网格。

这可能吗?如果没有,我可以以某种方式手动隐藏非叶节点而不从树数据模型中删除它吗?

1 个答案:

答案 0 :(得分:1)

也许您已经在github上看到了这个增强请求......

https://github.com/ceolter/ag-grid/issues/110

我采用了在那里创建的示例并使用externalFilter对其进行了修改。以JSFiddle为例。

以下是外部过滤器的过程:

  1. 更改输入后,请致电gridOptions.api.onFilterChanged()

  2. 通知网格
  3. 通过将gridOptions.isExternalFilterPresent设置为true

  4. ,让网格知道外部过滤器存在 然后会在每个 gridOptions.doesExternalFilterPass 上调用
  5. node - 重要的是要注意在每个节点上调用它...一个组不是被认为是节点,只有叶元素

  6. 每个节点都通过node.parent包含其父级的数据,因此检查父级的组名是否包含过滤器文本,在示例中如下所示:node.parent.data.group.includes($scope.filter)如果为真,那么节点将保留在网格中。

  7. 此示例仅显示一个级别深度...如果组内有组,则doesExternalFilterPass中的逻辑将通过在检查父级的父级名称时递归而变得更复杂,但该逻辑不应该是太可怕了......

    此外,如果您有任何没有孩子的群组,他们将自动被过滤掉,因为他们实际上没有要显示/过滤的节点。