0

Ich bin ein Punktesystem, Bau und ich versuche, eine Punktzahl zu berechnen, basierend auf Werten in einer getrennten Sammlung. Ich habe dieses Beispiel verwendet: Calculating sum of repeated elements in AngularJS ng-repeat, aber ich konnte es nicht zum Laufen bringen, da ich glaube, dass sie eine Sammlung verwenden und nicht zwei. die Vorschläge von der FrageWie kann ich einen Wert zu berechnen, basierend auf Elemente in einem gefilterten AngularJS Repeater

Hier ist meine Vorlage oben mit:

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

Die 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; 
} 

Gibt es einen Weg, um alle Noten aus den gefilterten Kinder und Anzeige auf der zusammenzufassen Elternteil?

Antwort

0

Sie können die Filterantwort nehmen

ng-repeat = "Kind bei Kindern | Filter: {parentId: parent.id} als Kinder"

Verwendung als Syntax in Ihrer Kinder filtern und in einem Summenfilter verwenden, die die Summe der Punkte aller Kinder eines Elternteils angezeigt wird.

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; 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
<head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <link data-require="[email protected]" 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="[email protected]" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script> 
 
    <script data-require="[email protected]*" 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>

P. S: i für Eltern und Kinder nicht die genaue JSON hat, so habe ich postedTime bei Kindern entfernt, aber man kann es in Ihrem aktuellen Code verwenden.

0

Um es einfach zu halten, können Sie einen ng-init für die Summe hinzuzufügen, die Sie für

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

suchen sein können Sie die totalScore verwenden können, um anzuzeigen, wo es für Sie erforderlich ist

+0

Dies funktioniert innerhalb des Repeaters, ich versuche, die Punktzahl außerhalb davon anzuzeigen. Wenn ich 5 Kinder in meinem Repeater habe, möchte ich die Punktzahl jedes Kindes summieren und in der Elternvorlage anzeigen. Kann das mit ng-init gemacht werden? – ChristopherHall

+0

Dann können Sie entfernen {{totalScore}} und greifen Sie in der Steuerung mit dem Umfang, ich denke, Sie sollten diesen Wert zugreifen können – CrazyMac

Verwandte Themen