角度顺序对象按属性

时间:2014-01-31 19:43:52

标签: angularjs angularjs-ng-repeat

我有一个角度应用,它从API端点消耗jsonjson数据的到达方式如下:

任务:

$scope.tasks = [ {id:23, title:'foo'}, {id:448, title:'bar'} ]

但是为了方便地访问角度内的数据我映射了对象,以便得到类似的东西:

$scope.tasks = { 23:{id: 23, title:'foo'}, 448:{id:23, title:'foo'} }

这允许我提取task个实例并仅使用id修改任务实例。

这样做的结果是我丢失了Angular的简单orderBy方法,尽管ng-repeat继续按预期运行。

所以,我的问题是,如果我想现在通过title-title订购我的列表,怎么能实现? Angular中有什么可以实现这个目标,还是应该滚动我自己的过滤器?

修改

所以在我的模板中我想这样做:

<div ng-repeat="task in tasks | orderBy:'-title'">
    <span>{{ task.title }}</span>
</div>

因此,如果代码采用第一种格式,orderBy过滤器可以正常工作,但如果代码按第二种格式映射则不起作用。

1 个答案:

答案 0 :(得分:0)

为什么不编写一个方法来根据给定的ID提取任务,而不是重新格式化API的响应并编写自己的转发器指令?

function getTask(id) {
    for (var i = 0; i < $scope.tasks.length; i++) {
        if ($scope.tasks[i].id == id)
            return $scope.tasks[i];
     }
}

上述任务仍将绑定到$scope.tasks数组,因此您所做的任何属性更改都应反映在视图中。