Comment faire fonctionner le filtre orderby sur un tableau de chaînes?


85

Voici le code qui ne fonctionne pas: Démo: http://jsfiddle.net/8dt94/63/

<div ng-controller="MyCtrl">    
    <input type="text" ng-model="searchText" />
  <ul ng-repeat="strVal in arrVal|orderBy|filter:searchText" >
      <li>{{strVal}}</li>
  </ul>
</div>

var app=angular.module('myApp', []);
app.controller('MyCtrl', function ($scope,$filter) {
  $scope.arrVal = ['one','two','three','four','five','six'];  
});

Je ne crois pas que vous devriez utiliser des valeurs primitives dans votre tableau ng-repeat. Sinon ça marche. ( jsfiddle.net/EGVwG ).
Tosh

Cette question s'applique toujours aux ng-options attr d'un select, qui doit être une liste de chaînes.
Train d'Espagne le

Réponses:


248

Vous pouvez commander par une méthode, vous pouvez donc utiliser la méthode toString

<ul ng-repeat="strVal in arrVal | orderBy:'toString()' | filter:searchText">

+1. De plus, vous pouvez ajouter "track by" à la fin: <ul ng-repeat = "strVal in arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Amy

9
Excellente solution, j'avais besoin d'un tableau de nombres triés comme ça, [2,5,3,1,6, 33]alors à la place, toString()j'ai utilisé valueOf()et cela a fonctionné parfaitement. Merci pour la solution.
ug_

Cela a fonctionné pour moi aussi! Une idée de pourquoi cette astuce fonctionne?
elethan

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.