2014-10-27 52 views
5

我有一个包含国家如何使用角度orderBy过滤器按字母顺序对字符串数组进行排序?

$scope.model = { 
    name: "foo", 
    countriesVisited: ["CA", "AR", "GB", "FR", "MX", "AU", "IE", "RU", "IT", "ES", "IN", "US", "NL", "DE", "CL", "BR", "JP", "NZ", "PL"] 
    } 

使用的NG-重复指令列表列出他们在他们的显示顺序的模型。 放置一个orderBy过滤器并不排序这些项目,但是这个顺序看起来是随机的。看到这个plunker

删除过滤器并观察输出班次。粘贴回来,它是在一个奇怪的顺序。

有没有办法让countriesVisited数组无需移动到它自己的$ scope变量?

回答

13
<li ng-repeat="country in model.countriesVisited | orderBy:'toString()'"> 
+1

由于值已经是字符串,是不是有一种较不贪心的方式来排序呢?我只是好奇 – glepretre 2014-10-29 14:46:50

2

将您的订单更改为orderBy:'toString()'。基元不默认排序,但您可以像我们这里所做的那样传递一个函数。

+0

好 - 澄清,这是将数组中的每个项目从字符串类型转换为字符串对象,正确吗?为什么基元不会默认排序?我已阅读了字符串和字符串之间的区别,但从未在实践中遇到它 - 感谢您的帮助! – tim 2014-10-27 03:14:57

+1

orderBy过滤器期待一个对象。请查看[https://docs.angularjs.org/api/ng/filter/orderBy](https://docs.angularjs.org/api/ng/filter/orderBy)上的文档。您会看到三个选项可用于表达式:要排序的值的字符串,函数或字符串或函数的数组。 – rtucker88 2014-10-27 03:22:08