我试图使用AngularJS我的第一个项目(一个锦标赛经理)和order-filter过滤器ng-repeat不工作:(我已经阅读所有的
documentation about that,但没有做:
所以,我有vars定义在$ scope像这样:
$scope.order_item = "count_win"; $scope.order_reverse = false; $scope.teams = { 100 : { id: 100,name: "XXX",count_win: 1,count_loose: 2,goal_average: 1,},200 : { id: 200,[...] };
现在,在我的观点,我试图重新排序(首先只有一个订单项目,但从未工作…)
<tr ng-repeat="team in teams | orderBy:order_item:order_reverse"> <td>{{team.name}}</td> <td>{{team.count_loose}}</td> <td>{{team.goal_average}}</td> </tr>
第二次,我想从2条信息重新排序:count_win和goal_average如果第一个相等..我尝试替换$ scope.order_item像这样,但如果一个代码不工作,他永远不会工作与2 …
$scope.order_item = ['count_win','goal_average'];
谢谢大家阅读和遗憾的职位大小。
$ scope.teams不是一个数组(它是一个对象的对象),orderBy过滤器只适用于数组。如果你使$ scope.teams数组,它将工作:
$scope.teams = [ { id: 100,name: "team1",count_win: 3,goal_average: 2,{ id: 200,name: "team2",{ id: 300,name: "team3",} ];
或者,您可以添加对对象工作的特殊过滤器,像这样(从here借用):
app.filter('orderObjectBy',function() { return function(items,field,reverse) { var filtered = []; angular.forEach(items,function(item) { filtered.push(item); }); filtered.sort(function (a,b) { return (a[field] > b[field] ? 1 : -1); }); if(reverse) filtered.reverse(); return filtered; }; });
并使用它像这样:
<tr ng-repeat="team in teams | orderObjectBy:order_item:order_reverse">
请注意,此自定义过滤器将不会与排序顺序数组一起使用,如问题的第二部分所示。