Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use parameters within the filter in AngularJS?

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?

like image 681
Vural Avatar asked Aug 16 '12 23:08

Vural


People also ask

How do you indicate a parameter to a filter?

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. 2) Create a new filter that takes in a parameter like this fiddle.

What is the correct way to apply filter in AngularJS?

In AngularJS, you can also inject the $filter service within the controller and can use it with the following syntax for filter. Syntax: $filter("filter")(array, expression, compare, propertyKey) function myCtrl($scope, $filter) { $scope. finalResult = $filter("filter")( $scope.

How does filter work in AngularJS?

The “filter” Filter in AngularJS is used to filter the array and object elements and return the filtered items. In other words, this filter selects a subset (a smaller array containing elements that meet the filter criteria) of an array from the original array.

What is custom filter in AngularJS?

Introduction to AngularJS Custom Filter. In AngularJS filters are used to modify or update the data before rendering the data on view or UI. Filters are clubbed in expression or directives using pipe (|) symbol.


1 Answers

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.

like image 143
Gloopy Avatar answered Sep 20 '22 04:09

Gloopy