Jak sprawić, by filtr orderby działał na tablicy ciągów?

85

Oto kod, który nie działa: 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
źródło
Nie sądzę, abyś używał prymitywnych wartości w swojej tablicy powtórzeń ng. Jeśli nie, to działa. ( jsfiddle.net/EGVwG ).
Tosh
To pytanie nadal dotyczy atr ng-options elementu select, który musi być listą ciągów.
Hiszpania Pociąg

Odpowiedzi:

248

Możesz zamówić metodą, więc możesz użyć metody toString

<ul ng-repeat="strVal in arrVal | orderBy:'toString()' | filter:searchText">
notclive
źródło
+1. Dodatkowo możesz dodać „track by” na końcu: <ul ng-repeat = "strVal in arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Amy
9
Świetne rozwiązanie, potrzebowałem tablicy liczb posortowanych w ten [2,5,3,1,6, 33]sposób, więc zamiast tego toString()użyłem valueOf()i działało idealnie. Dzięki za rozwiązanie.
ug_
Dla mnie to też zadziałało! Masz jakiś pomysł, dlaczego ta sztuczka działa?
elethan
11

Napisz własny filtr :

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

HTML:

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

Fiddle .

Mark Rajcok
źródło