我一直在寻找解决方案,但我无法找到确切的方案。我想知道有人可以帮忙。我有像这样的ng-repeat过滤器列表:
<ul>
<li ng-repeat="f in filterOptions">
<p>{{f.group}}</p>
<ul>
<li ng-repeat="o in f.options">
<input id="{{$parent.f.filtername}}{{$index}}" type="checkbox" ng-model="Filter.category[o.title]" ng-true-value="{{o.title}}" ng-false-value="" />
</li>
</ul>
</li>
</ul>
我的JSON:
[
{
"group": "Product Categories",
"filtername" : "category",
"options": [
{
"title": "Category A",
"alt_titles": ["Category B, Category C"]
},
{
"title": "Category 1",
"alt_titles": ["Category 2, Category 3"]
}
]
}
]
有了这个,我可以成功搜索属于o.titles的项目。现在,我想知道我该怎么做才能搜索也属于alt_titles的项目。
例如:如果我点击A类,它也会循环B类和C类的项目。与类别1相同,它应该显示类别2和3的项目。
我希望我很清楚。请帮忙。谢谢!
工作样本FIDDLE
答案 0 :(得分:1)
在这种情况下,您需要一个自定义过滤器。这里的文档:https://docs.angularjs.org/tutorial/step_09我的示例:http://plnkr.co/edit/lzyo5cTMd6FUzYw9JSq8
app.filter('MultiValueFilter',function(){
return function(list, queries){
var result = [];
var queries_regex = [];
angular.forEach(queries, function(query){
queries_regex.push(new RegExp('^' + escapeRegExp(query),'i'));
});
angular.forEach(list, function(item){
for(var i = 0; i < queries_regex.length; ++i){
if(queries_regex[i].test(item)){
result.push(item);
break;
}
}
});
return result;
};
});
基本上,这个函数循环遍历列表中的每个项目,根据正则表达式列表对其进行测试,如果它与正则表达式中的一个匹配,则将其推送到结果中。