如何使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

这个问题仍然适用于select的ng-options属性,该属性必须是字符串列表。
西班牙2013年

Answers:


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()我改用fvalueOf()并能完美地工作。感谢您的解决方案。
ug_

这也对我有用!知道为什么这个技巧可行吗?
elethan '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.