2

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

提前致谢。请帮忙!

4

3 回答 3

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>
于 2015-04-26T10:29:36.463 回答
0
$scope.recipes = $filter('orderBy')($scope.data, "comments.length", true)

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

于 2015-04-26T11:06:16.910 回答
0

添加这个作为另一个答案,因为你想在你的控制器中管理它并且你想要相反,添加true作为最后的 arg$filter

文档 $filter('orderBy')(array, expression, reverse)

例子

$scope.recipes = $filter('orderBy')($scope.data, function(recipe) {
  return recipe.comments.length;
}, true);

我很确定如果您愿意,您也可以将反向设置为范围内的 var。

于 2015-04-26T10:55:28.373 回答