2016-04-24 11 views
0

Momentan wird totalCost in der Ansicht als Funktion an round übergeben, aber es muss ein ganzzahliger Wert sein.Wie gibt man einen Wert aus der Funktion zurück, die von der Factory übergeben wurde?

Ansicht

{{round(shoppingCart.totalCost)}} 

Fabrik

myApp.factory(.... 
var calculateTotalCost = function(){ 
    return this.items.map(function(item){ 
     return HelperFunctions.getPrice(item) * item.quantity; 
    }).reduce(function(p, c){ 
     return p + c; 
    }); 
    }; 
var factory = { 
shoppingCart: {order: currentOrder, totalCost: calculateTotalCost} 
} 
return factory; 
} 

Wie es zu lösen?

round : function (value) { 
     return typeof value !== 'undefined'? value.toFixed(2): 0; 
     } 

Antwort

1

Zur Zeit haben Sie totalCost Variable, die anhand von calculateTotalCost Funktion dort in shoppingCart Objekt halten. Während also die gleiche Variable auf Ansicht, benötigen Sie Dienstverweis verfügbar machen über die Aussicht haben, indem $scope.shoppingCart = shoppingCart

Sie tun number Filter selbst mit Präzision 2 in Ihrem Fall verwenden können, wie Sie den Wert auf Präzision fixiert machen wollte 2. Das hilft Ihnen auch, die Nummer im Währungsformat anzuzeigen.

{{shoppingCart.totalCost() | number:2 }} 
+0

Es ist gut funktioniert nicht –

+0

@RCola, sehe ich das Update, sollte es funktioniert –

+0

Jetzt im Controller '$ scope.roud = factory.round' haben. Wie pipe filtert Werte? Ich erwarte, dass es funktioniert wie 'number> = 5' und dann aufrunden; 'Nummer <5' Abrundung. –

0

Sie sollten vermeiden, eine Funktion von einer Factory direkt in einem Ansichtsausdruck aufzurufen.

In Controller Ihre Richtlinie der:

  1. die Fabrik injizieren.
  2. Rufen Sie eine Funktion getTotalCost (die calculateTotalCost versteckt)
  3. Speichern Sie das Ergebnis in einer Variablen.
  4. Anwenden der runden Funktion direkt in der Steuerung könnte auch eine nette Idee sein.
  5. Schließlich binden Sie die Variable an die Ansicht.
+0

Gibt es eine Möglichkeit, Angular handle/update automatisch' shoppingCart.totalCost' durch Aufruf von 'calculateTotalCost' zu machen, wenn sich 'items' ändert? Ich habe es geschafft, dass 'calculateTotalCost' in' productAdd() 'und' productRemove() 'aufgerufen wird, aber ich bevorzuge Angular, um das zu handhaben. –

+0

Ja mit '$ scope. $ Watch ('items.length', function() {...})' –

Verwandte Themen