【问题标题】:angular filter, nested ng-repeat角度过滤器,嵌套 ng-repeat
【发布时间】:2015-09-15 17:36:06
【问题描述】:

我在进行角度嵌套过滤时遇到问题,其中两个过滤器相互依赖。

我想做这样的事情:

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

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

  1. 如果第一个过滤器匹配,即组过滤器,则组件过滤器不应应用于该组中的组件。
  2. 如果没有找到与特定组的搜索词匹配的组件,则不应匹配该组。

关于如何做这样的事情有什么好主意吗?我尝试了许多不同的解决方案并搜索了解决方案,但找不到与此接近的解决方案。


编辑:

组看起来像:

[
  {
    "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;
       }}  )

所以现在,使用关于解析参数的建议,它会按应有的方式过滤,但删除组除外,当它没有组件时

【问题讨论】:

标签: javascript angularjs filtering


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多