2013-09-08 28 views
5

Tôi mới đến Angular và có một câu hỏi cơ bản về ng-ràng buộc mà tôi không thể tìm thấy trong tài liệu. Kịch bản của tôi dựa trên ứng dụng giỏ hàng trong cuốn sách O'Reily Angular.js và tôi dường như không thể có được ng-ràng buộc để làm việc.Angular.js: Làm thế nào để sử dụng ng-ràng buộc để hiển thị concat. các phần tử của một mảng dưới dạng một chuỗi?

Đầu ra mong muốn: Tôi cần phải sửa đổi chức năng điều khiển của mình để tôi có thể hiển thị các phần tử mảng $ scope.items được cập nhật của tôi trong khoảng 'Tổng cộng'.

Dưới đây là các chức năng:

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

    }; 
} 

Trả lời

13

Tôi muốn giới thiệu thực hiện một chức năng grandTotal trên $scope bạn và sau đó ràng buộc đó, như thế này:

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

Bạn cũng có thể sử dụng phép nội suy (thay vì ngBind) như được chỉ ra trong khoảng đầu tiên.

+0

tôi đang ở trong một tình huống tương tự, nhưng tôi cần điều đó tổng cộng trả về một đối tượng như: {baseTotal: 200.00, vat22: 44.00, tổng: 244.00} Và sau đó in nó như thế này: Base: {{ . GrandTotal() baseTotal}}
VAT 22%: {{GrandTotal() vat22}}
Tổng số:. {{GrandTotal() tổng}}
Nhưng, làm như vậy, có vẻ như chức năng sẽ. được gọi nhiều hơn ít nhất 3 lần! Không có cách nào để lấy kết quả grandTotal() vào một giá trị trung gian? Cảm ơn. – TesX

+0

Tôi sẽ không lo lắng về 3 cuộc gọi đó ... chúng sẽ rẻ và bạn không nên nhận thấy sự chậm lại. Ngoài ra, bạn có thể thay đổi 'grandTotal()' để viết ba giá trị vào phạm vi ('$ scope.baseTotal = X; $ scope.vat22 = Y; $ scope.total = Z;') và sau đó gọi sử dụng '$ watch' hoặc '$ watchCollection' để theo dõi các thay đổi trong mảng các mục của bạn và gọi' grandTotal() 'khi bộ sưu tập thay đổi. – Langdon