Wie funktioniert der Orderby-Filter für ein Array von Zeichenfolgen?

85

Hier ist der Code, der nicht funktioniert: Demo: 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'];  
});
SunnyShah
quelle
Ich glaube nicht, dass Sie primitive Werte in Ihrem ng-repeat-Array verwenden sollten. Wenn nicht, funktioniert es. ( jsfiddle.net/EGVwG ).
Tosh
Diese Frage gilt weiterhin für die ng-options attr einer Auswahl, bei der es sich um eine Liste von Zeichenfolgen handeln muss.
Spanien Zug

Antworten:

248

Sie können nach einer Methode bestellen, sodass Sie die toString-Methode verwenden können

<ul ng-repeat="strVal in arrVal | orderBy:'toString()' | filter:searchText">
notclive
quelle
+1. Zusätzlich können Sie am Ende "track by" hinzufügen: <ul ng-repeat = "strVal in arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Amy
9
Tolle Lösung, ich brauchte eine Reihe von Zahlen, die so sortiert waren, [2,5,3,1,6, 33]also habe toString()ich stattdessen verwendet valueOf()und es hat perfekt funktioniert. Danke für die Lösung.
ug_
Das hat auch bei mir funktioniert! Irgendeine Idee, warum dieser Trick funktioniert?
Elethan
11

Schreiben Sie einen benutzerdefinierten Filter :

app.filter('mySort', function() {
    return function(input) {
      return input.sort();
    }
  });

HTML:

<ul ng-repeat="strVal in arrVal|filter:searchText|mySort">

Geige .

Mark Rajcok
quelle