角度滤波器,嵌套的ng-repeat

时间:2015-06-29 09:50:05

标签: javascript angularjs filtering

我通过在角度中进行嵌套过滤来解决问题,其中两个过滤器相互依赖。

我想做这样的事情:

<div ng-repeat="g in groups | filter:groupFilter">
  ...
  <tr ng-repeat="c in g.components | filter:componentFilter">
    ...
  </tr>
  ...
</div>

但我的问题是以下两个限制:

  1. 如果第一个过滤器匹配,即组过滤器,则组件的过滤器不应该应用于该组中的组件。
  2. 如果未找到与特定组的搜索字词匹配的组件,则不应匹配该组。
  3. 关于如何做这样的事情的任何好主意?我尝试了许多不同的解决方案并寻找解决方案,但找不到与此相近的东西。

    编辑:

    群组看起来像:

    [
      {
        "group_id": 1,
        "order_id": 180,
        "title": "Title1",
        "priority": 1
      },
    
      {
        "group_id": 2,
        "order_id": 180,
        "title": "Title2",
        "priority": 2
      }
    ]
    

    和组件:

    "components": [
        {
          "component_id": 1,
          "order_id": 180,
          "group_id": 1,
          ...,
          "materials": [
            ...
        ] } ... ]
    

    过滤器:

    <tr ng-repeat="c in g.components | componentFilter: searchTerm:group">
    
    
    .filter('componentFilter',function(){
           return function(components, searchTerm, group){
             var term = searchTerm.toLowerCase();
             var filtered = [];
             angular.forEach(components, function(c){
               if((c.description.toLowerCase().indexOf(term) != -1) ||
                  c.type.toLowerCase().indexOf(term) != -1 ||
                  group.title.toLowerCase().indexOf(term) != -1){
                 filtered.push(c);
               }
             });
             return filtered;
           }}  )
    

    所以现在,使用解析参数的建议,除了删除组,没有组件时,它应该按照它应该进行过滤

1 个答案:

答案 0 :(得分:0)

您可以将过滤后的结果放入新变量中。

 <div ng-repeat="g in filteredGroup = (groups | filter:   groupFilter)">' 

然后将布尔参数传递给第二个过滤器以确定它是否应该过滤。 (filteredGroup.length == groups.length)

您可以使用相同的策略来确定第二个过滤器是否匹配组。