2015-03-09 2 views
0

Dans mon projet, nous affichons une liste ÉNORME de chaînes (17 000+ parfois) Avec une boîte de saisie pour l'appariement de la liste à l'aide d'un filtre. J'ai utilisé le filtre par défaut d'angular jusqu'à ce qu'on me demande de le trier de sorte que les chaînes commençant par la requête de recherche viennent avant les mots qui le contiennent.Puis-je configurer le filtre angulaire par défaut pour afficher les chaînes de sorte que celles qui commencent par le terme de recherche viennent en premier?

Dire que j'ai un tableau de chaînes $scope.array = ["aaa","abb","abc","bad","bcd","cool","cold"] En ce moment, si je filtre avec le query string 'c', ce qui va apparaître est 'abc','bcd,'cool','cold' dans cet ordre. Cependant, lorsque la plupart des gens commencent à chercher avec 'c', ils veulent probablement voir 'cool' et 'cold' apparaître en premier. Je voudrais que le tableau soit 'cool','cold','abc',bcd (ou peut-être froid puis cool si le tri alphabétique fait partie du paquet) Je me méfie de l'écriture de mon propre filtre parce que je préfère utiliser quelque chose de vrai avec une si grande collection de données.

Y at-il un moyen d'y parvenir sans écrire mon propre filtre personnalisé?

Il semble que la fonctionnalité assez commune qu'il devrait y avoir une config pour elle ou peut-être un filtre commun que je peux attraper de github?

Répondre

1

Je pense que l'utilisation de l'orderBy angulaire avec une fonction qui vérifie si la chaîne commence par C et renvoie la valeur asc correcte, il ferait ce que vous avez besoin. La question est: que fera-t-il après le tri par les caractères de départ, renvoie-t-il l'ordinalité courante du tableau, ne sachez pas si cela compte pour vous.

Certains pseudo:

$scope.vm.filter = 'c' 
$scope.orderByStartsWith = function(item) { 
    return item.startsWith($scope.vm.filter) ? 0 : 1; 
} 

<li ng-repeat="item in array | filter:vm.filter | orderBy:orderByStartsWith" >{{item}}</li> 

Je souhaite angulaire vous permettra de passer plus params dans l'ordre par la fonction.