2014-09-04 20 views
6

Có cách nào để đếm một mục, sau đó hiển thị nó bên ngoài vòng lặp không?ng-lặp lại - đếm trong vòng lặp html

<tr ng-repeat="value in values"> 
    <td>value.total</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 

Tôi đã thử sử dụng ng-init() để không thành công như tôi nghĩ rằng nó vượt quá mỗi lần.

<tr ng-repeat="value in values"> 
    <td ng-init="total = total + value.total>value.total</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 

Có cách nào để thực hiện việc này tại đây mà không có chức năng trong bộ điều khiển của tôi không?

+1

Vâng, nó là khả thi và các câu trả lời hiển thị như thế nào, nhưng làm bạn tin rằng tính toán như vậy nên được thực hiện trong mẫu? – maklemenz

+0

Cảm ơn câu hỏi .. Tôi đã tự hỏi làm thế nào điều này có thể đạt được .. – forgottofly

+0

@Alias ​​http://stackoverflow.com/questions/22731145/calculating-sum-of-repeated-elements-in-angularjs-ng-repeat/ 25885501 # 25885501 - kiểm tra bài đăng này –

Trả lời

6

total đó được khởi tạo trong ng-repeat sẽ có một phạm vi khác nhau và không thể được truy cập bên ngoài vòng lặp.

Hãy thử điều này:

<table ng-init="total = 0"> 
<tr ng-repeat="value in values"> 
    <td ng-init="$parent.total = $parent.total + value.total">{{value.total}}</td> 
</tr> 
<tr> 
    <td>Total Of All Values: {{ total }}</td> 
</tr> 
</table> 
3

Bạn có thể sử dụng ký hiệu $ parent để truy cập biến $ scope (từ bên ngoài ng-repeat) trong phạm vi ng-repeat. Vì vậy, bây giờ sau khi khởi tạo nó sẽ tính toán tổng số và lưu nó trong biến $ scope được khởi tạo bên ngoài.

Code:

<div ng-app ng-controller="test"> 
    <table ng-init="total=0;"> 
     <tr ng-repeat="value in values"> 
      <td ng-init="$parent.total = total + value">{{value}}</td> 
     </tr> 
     <tr> 
      <td>Total Of All Values: {{ total }}</td> 
     </tr> 
    </table> 
</div> 

Working Fiddle

1

Mặc dù họ dường như tương tự ngRepeat không hoạt động giống như một vòng lặp for trong một ngôn ngữ lập trình bắt buộc. Chỉ thị ngRepeat bao gồm hai bước chạy riêng biệt. Đầu tiên, nó tạo ra một mảng/một bản đồ với các giá trị lặp lại. Thứ hai, nó biểu thị khuôn mẫu (các phần tử bên trong phần tử với ngRepeat) cho mỗi giá trị lặp lại. Tuy nhiên nó không lặp qua một khối mã như một ngôn ngữ lập trình bắt buộc.

Mặc dù bạn có thể đạt được những gì bạn cố gắng làm với $parent.total, bạn có thể gặp phải những cạm bẫy khác với giải pháp này ngay khi nội dung của thay đổi mảng của bạn. Để cắt ngắn, bạn nên tìm cách khác để tổng hợp các giá trị trong mảng.

Theo tôi, nơi tốt nhất để tổng hợp các giá trị là bộ điều khiển với một dòng như thế này:

$scope.total = values.reduce(function (a,b) {return a+b}); 
Các vấn đề liên quan