AngularJS 过滤多个复选框的多个列表

AngularJS filter on multiple lists of multiple checkboxes

如果已经回答了这个问题,我深表歉意,但我是 Angular 的新手,所以可能错过了。

我需要提供多组复选框列表,需要组合起来创建一个 AND 查询。

它在 Plunker 上 http://plnkr.co/OGmGkz22n4J4T8p74yto 但附在下面。目前我可以 select 底行和正确的名称出现在 storeArray 中,但我不知道如何将格式数组添加到过滤器中。

我试过:

<div ng-repeat="store in storeArray | filter:(formatFilter && tillFilter)">

<div ng-repeat="store in storeArray | filter:formatFilter:tillFilter">

但它们不起作用。

有什么建议吗?

var myApp = angular.module('myApp', []);

function MyCtrl($scope) {

  $scope.formatFilter = function(a) {
    for (var fmt in $scope.formatsArray) {

      var f = $scope.formatsArray[fmt];

      if (f.on && a.format.indexOf(f.name) > -1) {
        return true;
      }

    }
  };

  $scope.tillFilter = function(a) {
    for (var till in $scope.tillsArray) {

      var t = $scope.tillsArray[till];

      if (t.on && a.tills.indexOf(t.name) > -1) {
        return true;
      }

    }
  };

  $scope.formatsArray = [{
    name: "Super",
    on: false
  }, {
    name: "Express",
    on: false
  }, {
    name: "Other",
    on: false
  }];

  $scope.tillsArray = [{
    name: "Main",
    on: false
  }, {
    name: "Service",
    on: false
  }, {
    name: "Petrol",
    on: false
  }];

  $scope.storeArray = [{
    "id": "1",
    "name": "101",
    "format": "Super",
    "tills": ["Main", "Service", "Petrol"]
  }, {
    "id": "2",
    "name": "102",
    "format": "Express",
    "tills": ["Main", "Service"]
  }, {
    "id": "3",
    "name": "103",
    "format": "Other",
    "tills": ["Main", "Petrol"]
  }, {
    "id": "4",
    "name": "104",
    "format": "Super",
    "tills": ["Service", "Petrol"]
  }];

}

虽然您可以像这样将过滤器链接在一起:

<div ng-repeat="store in storeArray | filter:formatFilter | filter:tillFilter)">

这不会解决您的问题,因为第一个过滤器会完成它的工作,并过滤掉您可能希望包含在第二个过滤器中的项目。我不确定有什么方法可以执行 "or" 过滤器。有什么理由你不能做一个包含两者的自定义过滤器吗?我用自定义过滤器修改了你的 plunker:

http://plnkr.co/edit/han1LFl7toTsSX27b9Q0?p=preview

代码不是很干净...它完成了工作。 :) 您可能需要稍微润色一下。