AngularJS - How to structure a custom filter with ng-repeat to return items conditionally AngularJS - How to structure a custom filter with ng-repeat to return items conditionally angularjs angularjs

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;      });    }});

Check on Plunker


For CoffeeScript lovers:

userApp.filter 'matchAccessLevel', ->  (items, userAccessLevel) ->    item for item in items when userAccessLevel >= item.minAccess