2017-03-20 2 views
0

Ich kann nicht verstehen, warum der nächste Code nicht funktioniert.AngularJs - Ng wiederholen Array

<div ng-repeat="r in reservations" ng-init="new = r.some_code"> 

<div ng-if="old == new"> 
    <p ng-init="sum = sum + r.cost">{{r.name}} - {{r.cost}}</p> 
</div> 

    <div ng-if="old != new"> 
     <p ng-init="old = new;">Total: {{sum}}</p> 
    </div> 

</div> 

Vor diesem Code Ich habe ein Array Reservierungen wie folgt aus:

reservations = [{name: client 1, some_code = 15, cost: 1000}, 
{name: client 1, some_code = 15, cost: 1000}, 
{name: client 2, some_code = 15, cost: 1000}, 
{name: client 3, some_code = 16, cost: 2000}, 
{name: client 4, some_code = 16, cost: 3000}, 
{name: client 5, some_code = 17, cost: 3000}] 

$scope.old = reservations[0].some_code; 
$scope.sum = 0; 

Als Ergebnis erhalte ich so etwas wie:

15 - client 1 - 1000 
15 - client 2 - 1000 
15 - client 3 - 1000 
Total: 0 
Total: 0 

ich ein paar Mal versucht, aber mit unterschiedlichen falsche Ergebnisse. Ich möchte jede Reservierung anzeigen und wenn sich "some_code" ändert, zeige die Summe an.

Wie kann ich das tun?

HINWEIS: Das Array ist nach some_code sortiert.

+1

sehen, warum Sie Ihre Werte in einem nicht in der Steuerung für die Schleife berechnen, statt die Ansicht mit Modellrechnungen poluting? –

Antwort

0

In Ihrem Array haben Sie zwei Client 1, nicht sicher, ob das relevant ist.

Ich denke, es könnte besser sein, diese Summierungslogik auf den Controller zu verschieben. Sie könnten einen Hash mit some_code als Schlüssel erstellen, total als Wert.

Es wäre so etwas wie dieses

$scope.reservations = [{name: client 1, some_code = 15, cost: 1000}, 
 
{name: client 1, some_code = 15, cost: 1000}, 
 
{name: client 2, some_code = 15, cost: 1000}, 
 
{name: client 3, some_code = 16, cost: 2000}, 
 
{name: client 4, some_code = 16, cost: 3000}, 
 
{name: client 5, some_code = 17, cost: 3000}]; 
 

 
$scope.totals = {}; 
 
for (var i = 0; i < $scope.reservations.length; i++) { 
 
\t if (totals[$scope.reservations[i].some_code]) { 
 
\t \t totals[$scope.reservations[i].some_code] += $scope.reservations[i].cost; 
 
\t } else { 
 
\t \t totals[$scope.reservations[i].some_code] = $scope.reservations[i].cost; 
 
\t } 
 
}
<div ng-repeat="r in reservations" ng-init="new = r.some_code"> 
 
    <div> 
 
\t <p> {{r.name}} - {{r.cost}} </p> 
 
    </div> 
 

 
    <div> 
 
\t <p> Total: {{totals[r.some_code]}} 
 
    </div> 
 
</div>

+0

Das hat mir geholfen. Vielen Dank. –

0

Sie können Reservierungen mit some_code rendern und dann selektiv Details anzeigen. Eine Möglichkeit, eine Katze zu häuten: JSFiddle

Verwandte Themen