71 votes

Comment utiliser les paramètres dans le filtre dans angularjs?

Je veux utiliser le paramètre dans le filtre, quand j'itérer certains tableaux avec ng-repeat

Exemple:

Partie HTML:

 <tr ng-repeat="user in users | filter:isActive">
 

JS-part:

 $scope.isActive = function(user) {
    return user.active === "1";
};
 

Mais je veux pouvoir utiliser un filtre comme

 <tr ng-repeat="user in users | filter:isStatus('4')">
 

Mais ça ne marche pas. Comment puis-je faire quelque chose comme ça?

Je vous remercie!

121voto

Gloopy Points 16421

Mise à JOUR: je pense que je n'ai pas vraiment regarder la documentation assez bien, mais vous pouvez certainement utiliser le filtre de filtre avec cette syntaxe (voir ce violon) pour filtrer par une propriété sur les objets:

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

Voici ma réponse originale à cette question dans le cas où il aide à quelqu'un:

En utilisant le filtre de filtre, vous ne serez pas en mesure de passer un paramètre, mais il y a au moins deux choses que vous pouvez faire.

1) Définir les données que vous souhaitez filtrer dans une étendue variable et la référence de votre filtre de fonction comme ce violon.

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">

OU

2) Créer un nouveau filtre qui prend en paramètre comme ce violon.

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">

Remarque ce filtre suppose qu'il existe une status propriété dans les objets dans le tableau qui pourraient le rendre moins réutilisable, mais c'est juste un exemple. Vous pouvez lire ceci pour plus d'informations sur la création de filtres.

48voto

Denis Pshenov Points 1300

Cette question est presque identique à Passer des arguments à angularjs filtres, à qui j'ai déjà donné une réponse. Mais je vais poster une réponse de plus ici juste pour que les gens le voient.

En fait il y a une autre (peut-être une meilleure solution) où vous pouvez utiliser l'angle de natif de "filtre" filtre et encore passer des arguments à votre filtre personnalisé.

Considérons le code suivant:

    <li ng-repeat="user in users | filter:byStatusId(3)">
        <span>{{user.name}}</span>
    <li>

Pour ce faire, il suffit de définir votre filtre comme suit:

$scope.byStatusId = function(statusId) {
    return function(user) {
        return user.status.id == statusId;
    }
}

Cette approche est plus polyvalent car vous pouvez faire des comparaisons sur des valeurs qui sont imbriqués dans la profondeur de l'objet.

La caisse d'Inverser la polarité d'un angular.js filtre pour voir comment vous pouvez l'utiliser pour d'autres opérations avec filtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X