2016-08-30 2 views
1

J'ai implémenté un filtre personnalisé pour ma table ng, où elle utilise ngTagInput. Le lien [1] est similaire à mon code, ce filtre fonctionne uniquement avec la page en cours. Quelle est la bonne façon de filtrer tous les résultats dans ng-repeat.ng-table, ng-repeat, filtre fonctionne uniquement pour la page en cours, dans une table paginée


extrait de code pour le filtre:

.filter('filterByTags', function() { 
    return function (items, tags) { 
     var i = 0; 
     var filtered = []; // Put here only items that match 
     (items || []).forEach(function (item) { // Check each item 
      var matches = tags.some(function (tag) {   // If there is some tag 
       i++; 
       return (item.name.indexOf(tag.name) > -1) // that is a substring 
      });            // we have a match 
      if (matches) {   // If it matches 
       filtered.push(item); // put it into the `filtered` array 
      } 
     }); 
     if(i == 0){ 
      return items; 
     } 
     else{ 
      return filtered; 
     } 
    }; 
}) 

[1] Filter ngtagsinput in AngularJS

Répondre

0

J'ai eu aussi le problème que le filtre ne fonctionnait que sur la page en cours. La question initiale n'incluait pas le HTML, juste un lien vers un code similaire, donc je ne suis pas sûr que ma solution puisse s'appliquer à la question originale, mais cela pourrait aider d'autres personnes à se débattre avec la pagination et le filtrage. Mon HTML ressemblait à ceci, avec la pagination avant le filtrage:

<tr ng-repeat="item in items | pages: myCtrl.currentPage : myCtrl.itemsPerPage | filter: searchCriteria"> 

j'ai changé le code HTML pour mettre le filtrage avant la pagination, puis le filtre a travaillé sur toutes les pages:

<tr ng-repeat="item in items | filter: searchCriteria | pages: myCtrl.currentPage : myCtrl.itemsPerPage">