如何根据过滤的angularjs转发器中的项目计算值

时间:2017-01-21 01:38:32

标签: javascript angularjs mongodb angularjs-ng-repeat ng-filter

我正在建立一个评分系统,我正在尝试根据单独集合中的值计算得分。我一直在使用这个例子:Calculating sum of repeated elements in AngularJS ng-repeat,但由于我认为他们使用的是一个集合而不是两个集合,因此无法使其工作。

以下是我使用上述问题建议的模板:

<div>{{parent.id}}</div>
<div>{{ getTotal() }}</div>
<div ng-repeat="child in children | orderBy: '-postedTime' | filter: {parentId: parent.id}">
  <div>{{child.score}}</div>
</div>

js:

$scope.getTotal = function(){
var total = 0;
for(var i = 0; i < $scope.children.length; i++){
    var score = $scope.child.score[i];
    total += (child.score);
}
return total;
}

有没有办法将过滤后的孩子的所有分数相加并显示在父母身上?

2 个答案:

答案 0 :(得分:0)

为了简单起见,您可以为要查找的总和添加ng-init

<div ng-repeat="child in children | orderBy: '-postedTime' | filter: {parentId: parent.id}">
<td ng-init="totalScore = totalScore + child.score ">{{totalScore}</td>    
</div>

您可以使用totalScore来显示您需要的位置

答案 1 :(得分:0)

您可以采取过滤器响应

  

ng-repeat =&#34;儿童中的孩子|过滤:{parentId:parent.id} as kids&#34;

在子项过滤器中使用as语法,并在sum过滤器中使用它,该过滤器将显示父项的所有子项的分数总和。

&#13;
&#13;
var app = angular.module('plunker', []);

angular.module('plunker')
  .controller('MainCtrl', function($scope) {


    $scope.totalScore = 0;

    $scope.parents = [{
      id: 1
    }, {
      id: 2
    }]

    $scope.children = [{
      parentId: 1,
      score: 25
    }, {
      parentId: 1,
      score: 25
    }, {
      parentId: 1,
      score: 25
    }, {
      parentId: 2,
      score: 25
    }];

  })


app.filter('sum', function() {
  return function(kids) {
    var total = 0;
    if (kids) {
      for (i = 0; i < kids.length; i++) {
        total = total + kids[i].score;
      };
    }
    return total;
  };
});
&#13;
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <link data-require="bootstrap-css@3.3.6" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
  <script data-require="ui-bootstrap@*" data-semver="1.3.2" src="https://cdn.rawgit.com/angular-ui/bootstrap/gh-pages/ui-bootstrap-tpls-1.3.2.js"></script>
  <script src="app.js"></script>
  <script src="accounts.js"></script>
  <script src="controller.js"></script>
</head>

<body ng-controller="MainCtrl">
  <div ng-repeat="parent in parents">
    <div>parent id : {{parent.id}}</div>
    <div>total child scores : {{ kids | sum }}</div>
    <div ng-repeat="child in children | filter: {parentId: parent.id} as kids">
      <div>child Scores : {{child.score}}</div>
    </div>
  </div>


</body>

</html>
&#13;
&#13;
&#13;

P.S:我没有父母和孩子的确切JSON所以我已经删除了孩子们的postsTime,但你可以在你的实际代码中使用它。