2013-09-08 7 views
5

Jestem nowy w Angular i mam podstawowe pytanie dotyczące ng-bind, którego nie mogłem znaleźć w dokumentacji. Mój scenariusz opiera się na aplikacji koszyka na zakupy w książce O'Reily Angular.js i nie mogę sprawić, że ng-bind zadziała.Angular.js: Jak używać ng-bind do wyświetlania konkat. elementy tablicy jako ciąg znaków?

Wymagane wyjście: Potrzebuję zmodyfikować funkcję kontrolera, aby móc wyświetlać zaktualizowane elementy tablicy $ scope.items w zakresie "Grand Total".

Oto funkcja:

function CartController($scope) { 
    $scope.items = [ 
     {title: 'Software', quantity: 1, price: 1399.95}, 
     {title: 'Data Package (1TB)', quantity: 1, price: 719.95}, 
     {title: 'Consulting (per hr.)', quantity: 1, price: 75.00} 
    ]; 

    $scope.remove = function(index) { 
     $scope.items.splice(index, 1); 
    }, 

    $scope.reset = function(index) { 
     $scope.items = [ 
     {title: 'Software', quantity: 0, price: 1399.95}, 
     {title: 'Data Package (1TB)', quantity: 0, price: 719.95}, 
     {title: 'Consulting (per hr.)', quantity: 0, price: 75.00} 
    ]; 

    }; 
} 

Odpowiedz

13

Polecam dokonywania grandTotal funkcji na $scope a następnie wiązanie, że tak:

http://jsfiddle.net/XMTQC/

HTML

<div ng-app ng-controller="CartController"> 
    Grand Total: <span>{{grandTotal()}}</span> 
    <br/> 
    Grand Total: <span ng-bind="grandTotal()"></span> 
    <br/> 
</div> 

JavaScript

$scope.grandTotal = function() { 
    return $scope.items.reduce(function (p, c) { 
     return p.price || p + c.price; 
    }); 
}; 

Można również użyć interpolacji (zamiast ngBind), jak wskazano w pierwszym przęśle.

+0

jestem w podobnej sytuacji, ale muszę, że wielki łączna zwraca obiekt jak: {baseTotal: 200.00, vat22: 44.00, całkowita: 244,00} a następnie wydrukować go tak: Podstawa: {{ . grandTotal() baseTotal}}
VAT 22%: {{grandTotal() vat22}}
Razem:. {{grandTotal() łączna}}
Ale robi tak, wydaje się, że funkcja będzie. zadzwonić więcej, co najmniej 3 razy! Nie ma sposobu, aby pobrać wynik grandTotal() do wartości pośredniej? Dzięki. – TesX

+0

Nie martwiłbym się o te 3 połączenia ... powinny być tanie i nie powinieneś zauważać żadnego spowolnienia. Alternatywnie możesz zmienić 'grandTotal()', aby zapisać trzy wartości do zakresu ('$ scope.baseTotal = X; $ scope.vat22 = Y; $ scope.total = Z;'), a następnie wywołanie użyj '$ watch' lub '$ watchCollection' monitoruje zmiany w tablicy items i wywołuje' grandTotal() ', gdy kolekcja się zmieni. – Langdon

Powiązane problemy