AngularJS - How to structure a custom filter with ng-repeat to return items conditionally
Filters don't work on individual items in the array, they transform the entire array into another array.
userApp.filter('matchAccessLevel', function() { return function( items, userAccessLevel) { var filtered = []; angular.forEach(items, function(item) { if(userAccessLevel >= item.minAccess) { filtered.push(item); } }); return filtered; };});
See this plnkr
**always inspect the arguments to a function. It's not always obvious what the values are.*
see filters guide
You can use Array.filter for a more concise solution:
app.filter('matchAccessLevel', function() { return function( items, userAccessLevel ) { return items.filter(function(element){ return userAccessLevel >= element.minAccess; }); }});
For CoffeeScript lovers:
userApp.filter 'matchAccessLevel', -> (items, userAccessLevel) -> item for item in items when userAccessLevel >= item.minAccess