【问题标题】:Angular UI-Grid: filtering cross-column or cross-rowAngular UI-Grid:过滤跨列或跨行
【发布时间】:2015-08-08 16:37:30
【问题描述】:

我仍在学习 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 吗?)甚至可能是跨行(即我实际上有一个案例,我跨 sets 进行复杂测试 of rows 来确定应该过滤哪些行)。 是否有一种标准方法可以进行这种更全局的过滤?

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

我试图把一个更简单的情况放在一起(A = B 吗?):http://plnkr.co/edit/a0BJZVOGGIyP4Q4hxVob?p=preview

我认为,如果我了解如何使这项工作发挥作用,那么答案也许也可以回答(或使没有实际意义)问题的动态方面(如何在需要时强制执行过滤器操作)。

感谢您的帮助

【问题讨论】:

    标签: angularjs angular-ui-grid


    【解决方案1】:

    试试这样的

    {
       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.
         }
    },
    

    【讨论】:

    • 谢谢。那可以为我做。但是有没有办法强制(从网格控制器外部)重新评估这个列顶过滤器? (“其他条件”与 Grid 数据无关。
    【解决方案2】:

    我今天在教程中添加了一个跨领域示例:http://ui-grid.info/docs/#/tutorial/321_singleFilter

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

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

    【讨论】:

    • 感谢 Paul 提供的信息 - 我不知道 rowsProcessors。我试了一下,我发现我可以用它创建任何类型的全局过滤器。但我猜这排除了标准柱顶过滤器的使用?如果我尝试两者都做,网格似乎会冻结。
    • 不应该排除同时使用它们,它们应该彼此独立工作。
    • 但我注意到在您的 321 教程中(感谢 Paul),关键线似乎是 row.visible = true/false,而不是简单地返回 true 的“条件”函数/false,然后网格组合这些值。在这种情况下,这种逻辑组合真的会发生吗?
    • 不,这完全超出了标准过滤(位于 rowSearcher.js 中),因此它不支持条件等。我认为可以将这种方法应用于核心过滤,因此使用所有不同的条件排列,但我没有尝试这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多