ng-repeat命令错误

时间:2014-03-09 10:06:34

标签: angularjs angularjs-ng-repeat

我有一个包含照片详情的JSON,我想根据JSON中包含的id订购转发器:

ng-repeat="photo in photos | orderBy:'id'"

但结果顺序是这样的:

1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2 [..]

如何解决此订购问题?

更新:解决方案

即使下面提供的答案都有效,我也提供了最佳解决方案here

在我的PHP脚本中编码JSON时添加JSON_NUMERIC_CHECK,就可以了。

2 个答案:

答案 0 :(得分:3)

您应该创建一个用于订购的自定义函数。

   $scope.integerId= function(photo) {
       return parseInt(photo.id, 10);
    };

并将其用作

ng-repeat="photo in photos | orderBy:integerId"

http://jsfiddle.net/gaby/MvQK6/

演示

答案 1 :(得分:0)

我相信已经说过这种情况,因为你的照片'ID被解释为字符串,因此orderBy过滤器正在进行字典排序。

要解决此问题,您必须将ID转换为数字。你可以做的是创建一个新的过滤器,将id转换为数字:

angular.module('my.filters', []).filter("idToNumber", [function() {
    return function(value) {
        return value.map(function(item) {
            item.id = parseInt(id, 10);
            return item;
        );
    }
}]);

然后你可以像这样使用它:

ng-repeat="photo in photos | idToNumber | orderBy:'id'"