Як змусити фільтр замовлення працювати на масиві рядків?


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 ).
Тош

Це питання все ще стосується ng-options attr селекту, який повинен бути списком рядків.
Іспанський поїзд

Відповіді:


248

Ви можете замовити метод, отже, ви можете використовувати метод toString

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

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

9
Чудове рішення, мені знадобився масив чисел, відсортованих таким [2,5,3,1,6, 33]чином, тому замість цього toString()я використовував, valueOf()і він працював ідеально. Дякую за рішення.
ug_

Це спрацювало і у мене! Будь-яка ідея, чому цей трюк працює?
elethan

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.