Ich bin in einem Problem, wo ich an die Ausgabe einer Funktion innerhalb einer ng-Repeat-Schleife binden möchten. Ich stelle fest, dass die Funktion zweimal pro Element statt einmal aufgerufen wird, wie ich es erwarten würde. Hier ist der ng-repeat Abschnitt (man beachte die calcRowTotal() -Aufruf am Ende):Funktion aufgerufen mehrmals in AngularJS Abschnitt
<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>
Die calcRowTotal() Funktion wird unten gezeigt:
$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;
}
Ein Beispiel für eines der Elemente sein iterierten durch Als nächstes wird gezeigt:
{
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 }
]
}
ich folgendes in der Konsole (zwei Elemente befinden sich in der Sammlung ich Schleifen) zu sehen:
Ich könnte sicherlich eine "rowTotal" -Eigenschaft machen, würde aber lieber an "Live" -Daten binden, die von der oben gezeigten Funktion bereitgestellt werden. Hoffentlich ist die Vervielfältigung etwas, das ich einfach vermisse, daher schätze ich jede Rückmeldung darüber, warum ich die Vervielfältigung sehe. Als Nebenbemerkung, da die Daten in einem der Textfelder sich ändern, muss ich auch die Zeilensummen aktualisieren, so dass ich vielleicht einen anderen Ansatz brauche. Interessiert, diese spezielle Situation zuerst zu verstehen .... aber definitiv nicht die Verdoppelung, weil es möglicherweise viele Reihen möglicherweise geben könnte.
Hier ist ein Beispiel: http://jsfiddle.net/dwahlin/Y7XbY/2/
Dies ist ein Duplikat von http://stackoverflow.com/q/14973792/259038, obwohl es nicht sofort offensichtlich gewesen sein könnte. –
Danke Josh. Habe ziemlich viel Zeit mit der Suche verbracht, aber ich habe das nicht gesehen. Schätze die Informationen. –
Ja, das ist definitiv kein "delete this" Art von Duplikat, da es nicht offensichtlich ist, dass es sich um denselben Fall handelt. Ich wollte nur den Kreis für zukünftige Zuschauer schließen. –