web-dev-qa-db-fra.com

Angular.js. Comment compter les itérations ng-repeat qui satisfont le filtre personnalisé

Voici mon code:

<div ng-show="?" ng-repeat="item in items | notEmpty">
</div>

Filtre:

Kb.filter("notEmpty", function(){ 
  return function(input){
    var output=[];
    for(var i=0;i<input.length;i++){
      if(input[i]){
        output.Push(input[i]);
      }
    }
    return output;
}});

J'ai besoin d'afficher/masquer les répétitions s en fonction de la quantité d'éléments filtrés dans la boucle. Quelle est la meilleure façon de le faire?

Merci

21
Fyodor Khruschov

ng-repeat expression permet d'affecter des résultats filtrés à une variable. Cette variable sera accessible depuis la portée actuelle afin que vous puissiez l'utiliser dans la même portée quand vous le souhaitez

<p>Number of filtered items: {{filteredItems.length}}</p>

<div 
  ng-show="filteredItems.length > 0" 
  ng-repeat="item in filteredItems = (items | notEmpty)"
>
 {{$index}}
</div>
58
Stewie

Depuis Angular 1.3, vous pouvez utiliser la syntaxe suivante pour ng-repeat:

variable in expression as alias_expression

C'est:

<p>Number of filtered items: {{filteredItems.length}}</p>

<div ng-repeat="item in items | notEmpty as filteredItems">
 ...
</div>
2
Gaël J

Le moyen le plus simple consiste peut-être à exécuter le filtre dans votre contrôleur. Quelque chose comme ça:

function MyCtrl($scope, notEmptyFilter)
{
    //$scope.items is put into the scope somehow
    $scope.filteredItems = notEmptyFilter($scope.items);
}

Ensuite, votre code HTML ressemblerait à ceci:

<div ng-show="filteredItems.length > 0" ng-repeat="item in filteredItems">
</div>
2
dnc253

J'ai trouvé ça 

Comment afficher la longueur des données ng-repeat filtrées

qui décrit l'obtention du nombre après filtrage de la liste 

0
Sajjad Ali Khan