Angular UI-Grid:过滤交叉列或跨行

时间:2015-05-26 20:19:25

标签: angularjs angular-ui-grid

我还在学习Angular / ui-grid并且已经陷入困境,希望有人可以指出我正确的方向。设置网格时,可以使用以下命令启用过滤:

$scope.gridOptions.enableFiltering = true;

然后在 columnDefs 中定义网格时,您可以使用各种测试(等于,包含,精确,小于等)打开列过滤,或者自己制作 - 即甚至可以定义自己的布尔函数来驱动每行的通过/失败以获得所需的过滤逻辑。这是一个典型的例子:

{
   field: 'phone',
   filter: {
     condition: function(searchTerm, cellValue) {
       var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
       return strippedValue.indexOf(searchTerm) >= 0;
     }
},

但是这种过滤逻辑能力似乎都特定于一列。那么如果你有一个跨场的过滤测试(简单的例子:字段A =字段B?)或甚至可能是跨行(即我实际上有一个案例,我在集合中进行复杂测试 of rows来确定应该过滤/排出哪些行。 是否有一种标准方法可用于如何进行此类更全局的过滤?

通过将计算的包含/排除结果保存在一个实际未显示的隐藏列中,我已经接近解决方案,但我似乎无法让ui-grid实际执行过滤器功能隐藏的专栏。这提出了一个相关的问题:如何强制执行过滤操作(因为我想从不属于网格的控件触发)?

我试图整理一个更简单的案例(A = B?):http://plnkr.co/edit/a0BJZVOGGIyP4Q4hxVob?p=preview

我认为,如果我理解如何使这项工作,也许答案也会回答(或无言之意)问题的动态方面(如何在需要时强制过滤操作)。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我今天在教程中添加了一个交叉字段示例:http://ui-grid.info/docs/#/tutorial/321_singleFilter

关键是基本过滤一次对列进行操作。它从可见的所有行开始,然后如果行与任何单个列过滤器都不匹配,则将其设置为不可见。您要求的更类似于OR条件,过滤当前不支持。

但是,您可以做的是构建一个应用自定义过滤的自定义rowsProcessor,教程提供了一个示例。

答案 1 :(得分:0)

尝试这样的事情

{
   field: 'phone',
   filter: {
     condition: function(searchTerm, cellValue) {
       var strippedValue = (cellValue + '').replace(/[^\d]/g, '');
       var match1 = strippedValue.indexOf(searchTerm) >= 0;
       var match2 = // some Other condition
       return (match1 || match2); //add additional matches as needed.
     }
},