我通过在角度中进行嵌套过滤来解决问题,其中两个过滤器相互依赖。
我想做这样的事情:
<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;
}} )
所以现在,使用解析参数的建议,除了删除组,没有组件时,它应该按照它应该进行过滤
答案 0 :(得分:0)
您可以将过滤后的结果放入新变量中。
<div ng-repeat="g in filteredGroup = (groups | filter: groupFilter)">'
然后将布尔参数传递给第二个过滤器以确定它是否应该过滤。 (filteredGroup.length == groups.length)
您可以使用相同的策略来确定第二个过滤器是否匹配组。