AngularJS过滤多个复选框列表

时间:2015-07-17 18:53:09

标签: angularjs checkboxlist

如果已经回答这个问题,我很抱歉,但我是Angular的新手,所以可能会错过它。

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

它位于Plunker http://plnkr.co/OGmGkz22n4J4T8p74yto,但如下所示。目前我可以选择底行,并从storeArray中显示正确的名称,但我无法弄清楚如何将Format数组添加到过滤器中。

我试过了:

<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"]
  }];

}

1 个答案:

答案 0 :(得分:1)

虽然您可以像这样链接过滤器:

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

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

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

代码不是非常干净......它完成了这项工作。 :)你可能想稍微改善一下。