javascript - AngularJs 动态 orderBy 表达式

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

所以我想根据动态字段getTotal($index)进行排序。我应该怎么做?上面的 orderBy 不起作用。

下面是getTotal()函数的代码

$scope.getTotal = function (index) {
    var total = 0
    $scope.leaderBoardData[index].score.forEach(function (score) {
        total = total + score
    })
    return total
}

下面是排行榜数据

var leaderBoardData = [ { handleName: 'xyz', score: [1,2,3] },{ handleName: 'acc', score: [4,5,6] } ]

最佳答案

  1. 删除 orderBy 表达式的引号,这样 Angular 就知道它是一个函数,您不需要显式传递 $index 作为参数。

  2. 您需要将此 {{getTotal($index)}} 更改为 {{getTotal(data)}},因为数据已在此处迭代.

所以,基本上:

function Ctrl($scope) {

  $scope.leaderBoardData = [{
    handleName: 'xyz',
    score: [4, 5, 6]
  }, {
    handleName: 'acc',
    score: [1, 2, 3]
  }, {
    handleName: 'acFc',
    score: [1, 2, 4]
  }];

  $scope.getTotal = function(index) {
    var total = 0;
    // also change to index as array already passed to function
    index.score.forEach(function(score) {
      total = total + score;
    })
    return total;
  };
}
<!DOCTYPE html>
<html ng-app>

<head></head>

<body>
  <div>
    <div ng-controller="Ctrl" class="animate margin-top">
      <div layout="row" layout-align="center" ng-repeat="data in leaderBoardData | orderBy: getTotal" 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">
          <!-- change is here -->
          {{getTotal(data)}}
        </section>
      </div>
    </div>
  </div>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</body>

</html>

关于javascript - AngularJs 动态 orderBy 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315059/

相关文章:

javascript - 检查 GridView 中的复选框是否被选中

angularjs - 在代码上使用 API 时,Google Place 的街景与 google map 不一样

javascript - 在 Preact 中渲染 HTMLImageElement dom 节点

javascript - 如何解决十进制验证代码中的错误?

javascript - ionic : The back button is not showing when I refresh the page in the browser

angularjs - 如何在AngularJS/NodeJS中使用Docverter将GENERATED html转换为pdf以供下载

javascript - 将 scope.$watch 值返回给指令的链接函数

javascript - 搜索时分页未更新

angularjs - 带有谓词函数的 Angular ng-repeat 过滤器无法按预期工作

node.js - 在 $HTTP.post 之后更新 $scope