Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
42
rated 0 times [  44] [ 2]  / answers: 1 / hits: 103197  / 12 Years ago, thu, august 16, 2012, 12:00:00

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?


More From » angularjs

 Answers
165

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.


[#83589] Wednesday, August 15, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
nora

Total Points: 248
Total Questions: 111
Total Answers: 97

Location: India
Member since Wed, Aug 4, 2021
3 Years ago
;