2016-04-29 3 views
4

Ich arbeite an einem Wagen mit Angular, während dessen ich ein Problem mit der Berechnung hatte.Kalkulation in der Winkelansicht

In meinem Szenario habe ich Code so etwas wie

<label>No. of item</label> 
<div>{{totalItems}}</div> 


<div ng-repeat="cartElement in currentCartDetails.cartElements"> 
     <span>{{cartElement.productName}}</span> 
     <span>{{cartElement.productCode}}</span> 
     <span>{{cartElement.productPrice}}</span> 
     <span>{{cartElement.quantity}}</span> 
    </div> 

Was ich will, fügen Sie alle so etwas wie

totalItems += cartElement.quantity 

Ich weiß, dass es so viele Optionen sind zB den Wert anzuzeigen. Verwenden von Berechnung von Server-Seite, Iteration in Berechnung zu Controller

Aber was ich suche, wenn ich Objekt auf Ansichtsseite iterieren bin gibt es eine Möglichkeit, dort zu berechnen und profitieren von Tow-Way-Bindung.

Antwort

2

Haben Sie versucht, es mit der Funktion zu tun? Definieren Sie eine Funktion in Ihrem Controller wie calculateTotal dann rufen Sie es für jede Iteration.

$scope.totalItems = 0; 
... 
$scope.calculateTotal = function(cart){ 
    $scope.totalItems += cart.quantity; 
} 
... 

dann in der Vorlage

<div ng-repeat="cartElement in currentCartDetails.cartElements" ng-init="calculateTotal(cartElement)"> 
    <span>{{cartElement.productName}}</span> 
    <span>{{cartElement.productCode}}</span> 
    <span>{{cartElement.productPrice}}</span> 
    <span>{{cartElement.quantity}}</span> 
</div> 
+0

Vielen Dank, um einen Schritt der Iteration in Controller zu reduzieren, habe ich gerade diesen Prozess vergessen. – Sach

0

Sie können dies auch durch erreichen,

Methode 1:

HTML:

<div>{{gettotalItems(currentCartDetails.cartElements)}}</div> 

JS:

$scope.gettotalItems = function(cart_data){ 
    var num = 0; 
    for(var i=0;i<cart_data.length;i++) { 
     num += cart_data[0].quantity; 
    } 
    return num; 
} 

Methode 2:

HTML:

<div ng-init="gettotalItems(currentCartDetails.cartElements)>{{totalItems}}</div> 

JS:

$scope.gettotalItems = function(cart_data){ 
     var num = 0; 
     for(var i=0;i<cart_data.length;i++) { 
      num += cart_data[0].quantity; 
     } 
     $scope.totalItems = num; 
    } 

Vorteil ist, können Sie, indem ganze Liste von Objekten, die Gesamt Warenkorb Wert direkt in einem Anruf erhalten . anstatt jedes Mal während der Iteration zu zählen.

Verwandte Themen