Angularjs OrderBy on ng repeat不';行不通
我正在尝试将AngularJS用于我的第一个项目(一个锦标赛管理器),而Angularjs OrderBy on ng repeat不';行不通,angularjs,angularjs-ng-repeat,angularjs-filter,Angularjs,Angularjs Ng Repeat,Angularjs Filter,我正在尝试将AngularJS用于我的第一个项目(一个锦标赛管理器),而ng repeat上的orderBy过滤器不起作用:(我已经阅读了所有的/ 因此,我在$scope上定义了vars,如下所示: $scope.order_item = "count_win"; $scope.order_reverse = false; $scope.teams = { 100 : { id: 100, name: "XXX", count_win: 1, count_lo
ng repeat
上的orderBy
过滤器不起作用:(我已经阅读了所有的/
因此,我在$scope
上定义了vars,如下所示:
$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,
name: "XXX",
count_win: 1,
count_loose: 2,
goal_average: 1,
},
[...]
};
现在,在我看来,我正试图重新订购(首先只有一个订单项目),但从来没有工作
<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>
感谢大家的阅读,并对文章大小表示歉意。您不必为orderBy创建范围参数,如果您处理的是数组,您可以直接在标记中创建范围参数
<tr ng-repeat="team in teams | orderBy:count_win:false">
就这样说吧
<tr ng-repeat="team in teams | orderBy:customOrder">
就像@Jerrad所说的,
ng repeat
只对数组有效,所以你需要将你的团队对象转换成一个数组才能正常工作。$scope.teams
不是数组(它是对象的对象),并且,orderBy
过滤器仅适用于数组。如果将$scope.teams
设置为数组,则它将工作:
$scope.teams = [
{
id: 100,
name: "team1",
count_win: 3,
count_loose: 2,
goal_average: 2,
},
{
id: 200,
name: "team2",
count_win: 3,
count_loose: 2,
goal_average: 1,
},
{
id: 300,
name: "team3",
count_win: 1,
count_loose: 2,
goal_average: 1,
}
];
或者,您可以添加一个适用于对象的特殊过滤器,如(借用自):
然后像这样使用它:
<tr ng-repeat="team in teams | orderObjectBy:order_item:order_reverse">
var app = angular.module('app', []);
app.controller('Ctrl', function ($scope) {
$scope.teams = [
{
id: 100,
name: "A Team",
count_win: 1,
count_loose: 2,
goal_average: 1
},
{
id: 200,
name: "C Team",
count_win: 2,
count_loose: 3,
goal_average: 4
},
{
id: 300,
name: "B Team",
count_win: 4,
count_loose: 1,
goal_average: 8
}
];
$scope.predicate = 'name';
});
请注意,此自定义筛选器不会像问题的第二部分中那样处理排序顺序的数组。ng repeat仅对数组有效,对JSON对象无效。 这里已经讨论了这一点: 您要么将JSON对象更改为数组,要么动态转换它。 然后,控制器可以如下所示:
<tr ng-repeat="team in teams | orderObjectBy:order_item:order_reverse">
var app = angular.module('app', []);
app.controller('Ctrl', function ($scope) {
$scope.teams = [
{
id: 100,
name: "A Team",
count_win: 1,
count_loose: 2,
goal_average: 1
},
{
id: 200,
name: "C Team",
count_win: 2,
count_loose: 3,
goal_average: 4
},
{
id: 300,
name: "B Team",
count_win: 4,
count_loose: 1,
goal_average: 8
}
];
$scope.predicate = 'name';
});
我在这里创建了一个包含您的数据的演示文件:
将团队对象转换为数组可能存在的副本?@tatarin0你真的应该冷静下来。对不起,我刚刚花了20分钟试图找出你的答案不起作用的原因。即使是2小时,也不是攻击这样的人的理由。此外,如果你完全阅读了我的答案,而不是仅仅看代码,你可能不会有这个问题。谢谢你,我明白了…我试图添加你的oderObjectFilter,但我不知道如何将这个添加到我的应用程序中…(我知道我是新手:S)。我尝试过这样添加过滤器:angular.module('orderObjectBy',[])。filter('orderObjectBy',function(){***});angular.module('poolApp',['poolApp.Controller'、'poolApp.services'、'orderObjectBy']);但不起作用:/angular。moHere有一个plunker显示它起作用了:如果这没有帮助,我需要看看你的代码。它们是很多无用的代码,但你可能理解问题:有趣的是,你不能重复它,但不能对它使用按顺序筛选。希望angular在这种情况下更加一致。如果你能重复它,我会退出pect能够对其进行过滤。
<tr ng-repeat="team in teams | orderObjectBy:order_item:order_reverse">
var app = angular.module('app', []);
app.controller('Ctrl', function ($scope) {
$scope.teams = [
{
id: 100,
name: "A Team",
count_win: 1,
count_loose: 2,
goal_average: 1
},
{
id: 200,
name: "C Team",
count_win: 2,
count_loose: 3,
goal_average: 4
},
{
id: 300,
name: "B Team",
count_win: 4,
count_loose: 1,
goal_average: 8
}
];
$scope.predicate = 'name';
});