Angularjs 按属性的角度顺序对象
我有一个angular应用程序,它使用API端点的Angularjs 按属性的角度顺序对象,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我有一个angular应用程序,它使用API端点的json。json数据是这样到达的: 任务: $scope.tasks = [ {id:23, title:'foo'}, {id:448, title:'bar'} ] 但为了方便访问角度对象中的数据,我将对象映射为,这样我可以得到如下结果: $scope.tasks = { 23:{id: 23, title:'foo'}, 448:{id:23, title:'foo'} } 这允许我拉出task实例,并仅使用其id修改任务实例 这样做
json
。json
数据是这样到达的:
任务:
$scope.tasks = [ {id:23, title:'foo'}, {id:448, title:'bar'} ]
但为了方便访问角度对象中的数据,我将对象映射为,这样我可以得到如下结果:
$scope.tasks = { 23:{id: 23, title:'foo'}, 448:{id:23, title:'foo'} }
这允许我拉出task
实例,并仅使用其id
修改任务实例
这样做的结果是,我失去了简单的orderBy
Angular方法,尽管ng repeat
继续按预期工作
因此,我的问题是,如果我现在想按标题
或-title
对列表进行排序,如何实现这一点?在角度上是否有什么可以实现这一点,或者我应该使用自己的过滤器
编辑
因此,在我的模板中,我想这样做:
<div ng-repeat="task in tasks | orderBy:'-title'">
<span>{{ task.title }}</span>
</div>
{{task.title}}
因此,
orderBy
过滤器在代码为第一种格式时有效,但在代码映射为第二种格式时不起作用。为什么不编写一个方法,根据给定的ID提取任务,而不是重新格式化API的响应并编写自己的中继器指令
function getTask(id) {
for (var i = 0; i < $scope.tasks.length; i++) {
if ($scope.tasks[i].id == id)
return $scope.tasks[i];
}
}
函数getTask(id){
对于(变量i=0;i<$scope.tasks.length;i++){
if($scope.tasks[i].id==id)
返回$scope.tasks[i];
}
}
上述任务仍将绑定到
$scope.tasks
数组,因此您所做的任何属性更改都应反映在视图中。请发布代码或处理您的问题。它将帮助我们添加模板代码,这就是问题所在。我决定映射对象,以便可以轻松地更新、删除对象。我想避免每次发生这种情况时都必须迭代对象数组。@DarwinTech--我明白你的观点,但不管你是否要滚动自己的过滤器和顺序,迭代都必须进行。但是,如果要对对象进行排序,这个线程可能会帮你解决问题:是的,经过一番考虑,我决定采纳你的建议,放弃对象映射。所以,耶!我有orderBy
回来了!如果你想提供一个答案,我可以接受,尽管它可能会混淆OP。