AngularJS 自定义过滤器 orderBy sortPredicate 不起作用

AngularJS Custom Filter orderBy sortPredicate not working

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

提前致谢。请帮忙!

使用 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>

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

中的最终参数

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

例子

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

我敢肯定,如果您愿意,您也可以将 reverse 设置为范围内的 var。

$scope.recipes = $filter('orderBy')($scope.data, "comments.length", true)

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