Tôi đang gặp sự cố mà tôi muốn liên kết với đầu ra của một hàm bên trong vòng lặp ng lặp lại. Tôi thấy rằng chức năng này được gọi hai lần cho mỗi mục thay vì một lần như tôi mong đợi. Dưới đây là phần ng-repeat (chú ý gọi calcRowTotal() ở cuối):Chức năng được gọi nhiều lần trong AngularJS Lặp lại mục
<tr ng-repeat="row in timesheetRows">
<td>
<select ng-model="row.categoryID">
<option ng-repeat="category in categories" value="{{category.id}}">
{{category.title}}
</option>
</select>
</td>
<td ng-repeat="day in row.dayValues">
<input type="text" ng-model="day.hours" />
</td>
<td>{{calcRowTotal($index, row)}}</td>
</tr>
Các calcRowTotal() chức năng được hiển thị bên cạnh:
$scope.calcRowTotal = function (index, row) {
console.log('calcRowTotal - Index: ' + index);
var total = 0;
for (var i = 0; i < row.dayValues.length; i++) {
var num = parseFloat(row.dayValues[i].hours);
if (isNaN(num)) {
num = 0;
//this.dayValues[i].hours = 0;
}
total += num;
}
//updateDayTotals();
return total;
}
Một ví dụ về một trong những mặt hàng được lặp qua được hiển thị bên cạnh:
{
categoryID: 2,
dayValues: [
{ day: $scope.days[0], hours: 5 },
{ day: $scope.days[1], hours: 0 },
{ day: $scope.days[2], hours: 3 },
{ day: $scope.days[3], hours: 0 },
{ day: $scope.days[4], hours: 2 },
{ day: $scope.days[5], hours: 5 },
{ day: $scope.days[6], hours: 8 }
]
}
tôi nhìn thấy sau trong giao diện điều khiển (hai mặt hàng này hiện trong bộ sưu tập tôi đang Looping qua):
calcRowTotal - Index: 0
calcRowTotal - Index: 1
calcRowTotal - Index: 0
calcRowTotal - Index: 1
Tôi chắc chắn có thể tạo thuộc tính "rowTotal" nhưng muốn gắn kết với dữ liệu "trực tiếp" được cung cấp bởi hàm được hiển thị ở trên. Hy vọng rằng sự trùng lặp là một cái gì đó đơn giản tôi đang mất tích vì vậy tôi đánh giá cao bất kỳ thông tin phản hồi về lý do tại sao tôi nhìn thấy sự trùng lặp. Là một lưu ý phụ, vì dữ liệu trong một trong các hộp văn bản thay đổi, tôi cần phải cập nhật tổng số hàng cũng vì vậy có thể tôi cần một cách tiếp cận khác. Quan tâm đến sự hiểu biết tình hình cụ thể này đầu tiên mặc dù .... chắc chắn không muốn sao chép vì có thể có rất nhiều hàng tiềm năng.
Dưới đây là một ví dụ: http://jsfiddle.net/dwahlin/Y7XbY/2/
Đây là bản sao của http://stackoverflow.com/q/14973792/259038, mặc dù nó có thể không rõ ràng ngay lập tức. –
Cảm ơn Josh. Đã dành khá nhiều thời gian để tìm kiếm nhưng không thấy điều đó. Đánh giá cao thông tin. –
Vâng, đây chắc chắn không phải là loại "xóa" trùng lặp vì không rõ ràng là chúng giống nhau. Tôi chỉ muốn đóng vòng lặp cho người xem trong tương lai. –