Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs动态orderBy表达式_Javascript_Angularjs_Angularjs Ng Repeat_Angularjs Filter - Fatal编程技术网

Javascript AngularJs动态orderBy表达式

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">

下面是代码。我有嵌套的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">
            <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;
}
试试这个,它会有用的

  • 删除orderBy表达式的引号,这样angular就知道它是一个函数,而不需要显式地将$index作为参数传递

  • 您需要将此
    {{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;
    
         })