0

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

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

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

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

4

1 回答 1

4

也许你在 github 上看到过这个增强请求……

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

我采用了在那里创建的示例并使用externalFilter. 这是一个JSFiddle作为示例。

这是外部过滤器的过程:

  1. 当输入改变时,通过调用通知网格gridOptions.api.onFilterChanged()

  2. gridOptions.isExternalFilterPresent通过设置为让网格知道存在外部过滤器true

  3. gridOptions.doesExternalFilterPass然后将node在每个节点上调用 - 重要的是要注意它在每个节点上调用......一个组不被视为节点,只有叶元素

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

这个例子只显示了一层深度......如果你在组内有组,那么doesExternalFilterPass通过递归检查父母的父母姓名,逻辑会变得更加复杂,但这种逻辑不应该太糟糕......

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

于 2017-05-05T22:28:12.743 回答