问题是我有一组食谱对象。每个食谱对象都有一些评论。我想使用angular提供的$ filter服务在angularJS控制器中对数组进行排序。
$scope.recipes = $filter('orderBy')($scope.data, function(recipe) {
return recipe.comments.length;
});
但它没有给出所需的结果。但是,我能够使用像这样的
这样的JS数组排序功能来实现所需的结果$scope.data.sort(function(a, b) {
if (a.comments.length < b.comments.length) return 1;
if (b.comments.length < a.comments.length) return -1;
return 0;
});
同一场景的Plunkr是:http://plnkr.co/edit/L9Bt67xHRCJLBoWG8EZp?p=preview
提前致谢。请帮助!
答案 0 :(得分:2)
使用orderBy
可以做得更简单http://plnkr.co/edit/B0fMi7FotgmG2tkCjySt?p=preview
<ul>
<li ng-repeat="r in recipes | orderBy:'-comments.length'">
{{r.title}} - {{r.comments.length}}
</li>
</ul>
答案 1 :(得分:0)
将此添加为另一个答案,因为您想要在控制器中管理它而您想要反过来,在true
$filter
作为最终的arg
文档
$filter('orderBy')(array, expression, reverse)
实施例
$scope.recipes = $filter('orderBy')($scope.data, function(recipe) {
return recipe.comments.length;
}, true);
如果您愿意的话,我很确定您也可以将反向设置为范围。
答案 2 :(得分:0)
$scope.recipes = $filter('orderBy')($scope.data, "comments.length", true)
过滤器需要表达式,而不是函数。