Как заставить фильтр orderby работать с массивом строк?


85

Вот код, который не работает: Демо: 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'];  
});

Я не верю, что вам следует использовать примитивные значения в своем массиве ng-repeat. Если не работает. ( jsfiddle.net/EGVwG ).
Tosh

Этот вопрос по-прежнему относится к атрибуту ng-options для select, который должен быть списком строк.
Spain Train

Ответы:


248

Вы можете заказать по методу, поэтому вы можете использовать метод toString

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

+1. Кроме того, вы можете добавить в конец "track by": <ul ng-repeat = "strVal in arrVal | orderBy: 'toString ()' | filter: searchText track by $ index">
Эми

9
Отличное решение, мне нужен массив чисел, отсортированный таким образом, [2,5,3,1,6, 33]поэтому вместо этого toString()я использовал f, valueOf()и он работал отлично. Спасибо за решение.
ug_ 06

У меня это тоже сработало! Есть идеи, почему этот трюк работает?
elethan 07

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.