角度过滤器,嵌套 ng-repeat

Posted

技术标签:

【中文标题】角度过滤器,嵌套 ng-repeat【英文标题】:angular filter, nested 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>

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

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

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


编辑:

组看起来像:

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

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

【问题讨论】:

您可以将参数传递给过滤器。在这里查看:[***.com/questions/11753321/… [1]:***.com/questions/11753321/… 您需要自定义过滤器。请分享示例数据以及 groupFilter 和 componentFilter 定义 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于角度过滤器,嵌套 ng-repeat的主要内容,如果未能解决你的问题,请参考以下文章

角度材料选择不会检测到嵌套组件生成的选项的更改

如何在AngularJS中使用ng-repeat创建嵌套结构[关闭]

角度数据表嵌套行渲染

带有打字稿的嵌套角度指令

角度动态表单嵌套字段

如何以角度解析嵌套的json