Występuje problem, który chcę powiązać z wyjściem funkcji wewnątrz pętli ng-repeat. Zauważyłem, że funkcja jest wywoływana dwa razy na przedmiot, a nie raz, jak się spodziewałam. Oto odcinek ng-repeat (zawiadomienie calcRowTotal() wezwanie na końcu):Funkcja wywołana wiele razy w AngularJS Powtórz Sekcja
<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>
Funkcja calcRowTotal() jest wyświetlana obok:
$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;
}
Przykładem jednego z przedmiotów będących powtórzyć poprzez pokazano obok:
{
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 }
]
}
widzę następujące w konsoli (dwa przedmioty są obecnie w kolekcji mam przelotowego):
calcRowTotal - Index: 0
calcRowTotal - Index: 1
calcRowTotal - Index: 0
calcRowTotal - Index: 1
Mogę na pewno utworzyć właściwość "rowTotal", ale wolałbym powiązać dane "na żywo" z funkcją pokazaną powyżej. Mam nadzieję, że duplikacja jest czymś prostym, czego mi brakuje, dlatego doceniam wszelkie uwagi na temat tego, dlaczego widzę duplikację. Na marginesie, ponieważ dane w jednym ze zmian w polu tekstowym muszę aktualizować również sumy wierszy, może potrzebuję innego podejścia. Interesuje się przede wszystkim zrozumieniem tej konkretnej sytuacji ... na pewno nie chce duplikacji, ponieważ potencjalnie może być wiele wierszy.
Oto przykład: http://jsfiddle.net/dwahlin/Y7XbY/2/
To jest duplikat http://stackoverflow.com/q/14973792/259038, chociaż może nie było to od razu oczywiste. –
Dzięki Josh. Spędziłem sporo czasu na wyszukiwaniu, ale tego nie widziałem. Doceń informacje. –
Tak, to zdecydowanie nie jest "duplikat" tego duplikatu, ponieważ nie jest oczywiste, że są one tym samym przypadkiem. Chciałem tylko zamknąć pętlę dla przyszłych widzów. –