0

我一直在寻找解决方案,但找不到确切的方案。我想知道任何人都可以提供帮助。我有这样的 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

4

1 回答 1

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;
  };
});

基本上,此函数循环遍历列表中的每个项目,根据正则表达式列表对其进行测试,如果它与正则表达式之一匹配,则将其推送到结果中。

于 2015-03-30T23:52:51.713 回答