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'];  
});

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">

+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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.