How to use parameters within the filter in AngularJS?

angularjs, javascript

Solution

UPDATE: I guess I didn't really look at the documentation well enough but you can definitely use the filter filter with this syntax (see this fiddle) to filter by a property on the objects:

<tr ng-repeat="user in users | filter:{status:4}">

Here's my original answer in case it helps someone:

Using the filter filter you won't be able to pass in a parameter but there are at least two things you can do.

1) Set the data you want to filter by in a scope variable and reference that in your filter function like this fiddle.

JavaScript:

$scope.status = 1;
$scope.users = [{name: 'first user', status: 1},
                {name: 'second user', status: 2},
                {name: 'third user', status: 3}];

$scope.isStatus = function(user){
    return (user.status == $scope.status);
};

Html:

<li ng-repeat="user in users | filter:isStatus">

OR

2) Create a new filter that takes in a parameter like this fiddle.

JavaScript:

var myApp = angular.module('myApp', []);
myApp.filter('isStatus', function() {
  return function(input, status) {
    var out = [];
      for (var i = 0; i < input.length; i++){
          if(input[i].status == status)
              out.push(input[i]);
      }      
    return out;
  };
});

Html:

<li ng-repeat="user in users | isStatus:3">

Note this filter assumes there is a `status` property in the objects in the array which might make it less reusable but this is just an example. You can read this for more info on creating filters.

Problem

I want to use parameter in filter, when I iterate some arrays with ng-repeat Example: HTML-Part: ``` <tr ng-repeat="user in users | filter:isActive"> ``` JavaScript-part: ``` $scope.isActive = function(user) { return user.active === "1"; }; ``` But I want to be able to use filter like ``` <tr ng-repeat="user in users | filter:isStatus('4')"> ``` But its not working. How can I do something like that?

Original source

Related problems