AngularJS:在ng-model上搜索多个值

时间:2015-03-30 22:34:30

标签: javascript angularjs angularjs-ng-model

我一直在寻找解决方案,但我无法找到确切的方案。我想知道有人可以帮忙。我有像这样的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

1 个答案:

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

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