Multiple Filter on ng-repeat
Set multiple parallel filter on ng-repeat and order the result by column.
More information in my blog
http://andreaskarz.blogspot.com/2014/03/mehrere-filter-auf-ng-repeat-anwenden.html
HTML
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.js"></script>
<div ng-app="app" ng-cloak>
<section layout="row" flex="">
<div ng-controller="mainController" style="margin: 0 20px;">
<label>Search:
<input ng-model="filter.searchText">
</label>
<h2>Course Type</h2>
<label>Public</label>
<input type="checkbox" ng-model="filter.courseType.public" ng-true-value="'public'" ng-false-value="'!public'" />
<label>Private</label>
<input type="checkbox" ng-model="filter.courseType.private" ng-true-value="'private'" ng-false-value="'!private'" />
<label>Military</label>
<input type="checkbox" ng-model="filter.courseType.military" ng-true-value="'military'" ng-false-value="'!military'" />
<label>Resort</label>
<input type="checkbox" ng-model="filter.courseType.resort" ng-true-value="'resort'" ng-false-value="'!resort'" />
<hr />
<h2>Region</h2>
<label>Northern</label>
<input type="checkbox" ng-model="filter.region.northern" ng-true-value="'northern'" ng-false-value="'!northern'" />
<label>Central</label>
<input type="checkbox" ng-model="filter.region.central" ng-true-value="'central'" ng-false-value="'!southern'" />
<label>Southwestern</label>
<input type="checkbox" ng-model="filter.region.southwestern" ng-true-value="'southwestern'" ng-false-value="'!southwestern'" />
...
CSS
body {
font-family: calibri, arial;
}
h2 {
font-size: 14pt;
font-weight: bold;
}
li {
font-family: courier;
}
th {
font-weight: bold;
cursor: pointer;
}
JavaScript
var app = angular.module('app', ['ngMaterial']);
app.controller('mainController', function($scope, filterSettings) {
$scope.filter = filterSettings; // retrieve settings object from service method and bring into scope
$scope.OrderFilter = 'name'; // Default sort order
// Data object
$scope.courses = [{
name: 'Course 1',
courseType: 'Public',
region: 'Northern'
}, {
name: 'Course 2',
courseType: 'Public',
region: 'Northern'
}, {
name: 'Course 3',
courseType: 'Private',
region: 'Northern'
}, {
name: 'Links 4',
courseType: 'Private',
region: 'Northern'
}, {
name: 'Links 5',
courseType: 'Private',
region: 'Northern'
}, {
name: 'Links 6',
courseType: 'Public',
region: 'Southeastern'
}, {
name: 'Links 7',
courseType: 'Public',
region: 'Southeastern'
}, {
name: 'Links 8',
courseType: 'Military',
region: 'Southeastern'
}, {
name: 'Course 9',
courseType: 'Private',
region: 'Southeastern'
}, {
name: 'Course 10',
courseType: 'Private',
region: 'Southeastern'
}];
});
app.controller('secondController', function($scope, filterSettings) {
$scope.filter = filterSettings; // retrieve settings object from service method and bring into scope
});
app.factory('filterSettings', function() {
// Filter defaults
var settings = {};
settings.searchText = '';
settings.courseType = {
'public': 'public',
'private': 'private',
'military': 'military',
'resort': 'resort'
};
settings.region = {
'northern': 'northern',
'central': 'central',
'southwestern': 'southwestern',
'southeastern': 'southeastern'
};
return settings;
});
// Global search filter
app.filter('searchFilter', function($filter) {
return function(items, searchfilter) {
var isSearchFilterEmpty = true;
angular.forEach(searchfilter, function(searchstring) {
if (searchstring != null && searchstring != "") {
...