Javascript AngularJs动态orderBy表达式
下面是代码。我有嵌套的ng repeat和一个包含所有其他字段总和的字段Javascript AngularJs动态orderBy表达式,javascript,angularjs,angularjs-ng-repeat,angularjs-filter,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Filter,下面是代码。我有嵌套的ng repeat和一个包含所有其他字段总和的字段 <div class="animate margin-top" > <div layout="row" layout-align="center" ng-repeat="data in leaderBoardData | orderBy: 'getTotal($index)'" style = "padding: 10px;" class= "md-padding">
<div class="animate margin-top" >
<div layout="row" layout-align="center" ng-repeat="data in leaderBoardData | orderBy: 'getTotal($index)'" style = "padding: 10px;" class= "md-padding">
<section class="text-center width-20"><a>{{data.handleName}}</a></section>
<section class="text-center width-20" ng-repeat="score in data.score track by $index">{{score}}</section>
<section class="text-center width-20">{{getTotal($index)}}</section>
</div>
</div>
下面是排行榜数据
var leaderBoardData = [ { handleName: 'xyz', score: [1,2,3] },{ handleName: 'acc', score: [4,5,6] } ]
我猜$scope.leadboarddata不是数组(它是对象的对象),orderBy过滤器只适用于数组。如果您将$scope.leadboarddata设置为数组,它将正常工作我猜您没有正确使用forEach
$scope.getTotal = function (index) {
var total = 0;
angular.forEach($scope.leaderBoardData,function(score,index){
total = total + score
})
return total;
}
试试这个,它会有用的
{{getTotal($index)}}
更改为{{getTotal(data)}}
,因为这里已经迭代了数据函数Ctrl($scope){
$scope.leadboardata=[{
handleName:'xyz',
分数:[4,5,6]
}, {
handleName:'acc',
分数:[1,2,3]
}, {
handleName:'acFc',
分数:[1,2,4]
}];
$scope.getTotal=函数(索引){
var合计=0;
//同时更改为索引,因为数组已传递给函数
index.score.forEach(函数(分数){
总分=总分+总分;
})
返回总数;
};
}
{{data.handleName}
{{score}}
{{getTotal(data)}
你可以用这种方法来做。
HTML
是否要按“总计”属性排序?请共享“排行榜数据”示例structure@RIYAJKHAN对按总属性计算。将编辑并放置code@RIYAJKHAN查看数据!你想按分数对数据排序吗?@RIYAJKHAN total scoreI发布了数组数据!工作!:D谢谢!所以我在orderby中传递函数是错误的?getTotal()?没有orderby也接受函数,但您用单引号将其包装起来,根据它的说法,它认为这是一个stringoh!哦!谢谢你,亲爱的,我这样试过了!但我认为当我们可以使用角度功能时,这不是正确的方法!
$scope.getTotal = function (index) {
var total = 0;
angular.forEach($scope.leaderBoardData,function(score,index){
total = total + score
})
return total;
}
<div layout="row" layout-align="center" ng-repeat="data in leaderBoardData | orderBy: 'totalScore'" style = "padding: 10px;" class= "md-padding">
<section class="text-center width-20"><a>{{data.handleName}}</a></section>
<section class="text-center width-20" ng-repeat="score in data.score track by $index">{{score}}</section>
<section class="text-center width-20">total score={{data.totalScore}}</section>
</div>
$scope.leaderBoardData = [ { handleName: 'xyz', score: [111,21,3] },{ handleName: 'acc', score: [14,5,16] } ];
$scope.leaderBoardData.forEach(function(oneRecord,key){
var total=0;
oneRecord.score.forEach(function(oneEle,key){
total = total + oneEle
})
oneRecord.totalScore = total;
})