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
代码不是很干净...它完成了工作。 :) 您可能需要稍微润色一下。
如果已经回答了这个问题,我深表歉意,但我是 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
代码不是很干净...它完成了工作。 :) 您可能需要稍微润色一下。