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)
过滤器需要 表达式,而不是函数。
问题是我有一组食谱对象。每个配方对象都有一些注释。我想使用 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)
过滤器需要 表达式,而不是函数。