AngularJS自定义过滤器orderBy sortPredicate不工作

时间:2015-04-26 10:25:40

标签: javascript angularjs sorting angular-filters angularjs-orderby

问题是我有一组食谱对象。每个食谱对象都有一些评论。我想使用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

提前致谢。请帮助!

3 个答案:

答案 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)

过滤器需要表达式,而不是函数。