Come far funzionare il filtro orderby su array di stringhe?


85

Ecco il codice che non funziona: 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'];  
});

Non credo che dovresti usare valori primitivi nel tuo array ng-repeat. Altrimenti funziona. ( jsfiddle.net/EGVwG ).
Tosh

Questa domanda si applica ancora all'attr di ng-options di un select, che deve essere un elenco di stringhe.
Treno Spagna

Risposte:


248

Puoi ordinare in base a un metodo, quindi puoi utilizzare il metodo toString

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

+1. Inoltre puoi aggiungere "track by" alla fine: <ul ng-repeat = "strVal in arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Amy

9
Ottima soluzione, avevo bisogno di una serie di numeri ordinati in questo [2,5,3,1,6, 33]modo, quindi invece f toString()ho usato valueOf()e ha funzionato perfettamente. Grazie per la soluzione.
ug_

Questo ha funzionato anche per me! Hai idea del perché questo trucco funzioni?
elethan

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.