gpt4 book ai didi

javascript - AngularJS 重复部分中多次调用的函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:12 25 4
gpt4 key购买 nike

我遇到了一个问题,我想绑定(bind)到 ng-repeat 循环内函数的输出。我发现每个项目都会调用该函数两次,而不是我期望的一次。这是 ng-repeat 部分(注意末尾的 calcRowTotal() 调用):

<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>

calcRowTotal() 函数如下所示:

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

下面显示了其中一项被迭代的示例:

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

我在控制台中看到以下内容(我循环浏览的集合中目前有两项):

calcRowTotal - Index: 0 
calcRowTotal - Index: 1
calcRowTotal - Index: 0
calcRowTotal - Index: 1

我当然可以制作一个“rowTotal”属性,但更愿意绑定(bind)到上面显示的函数提供的“实时”数据。希望重复是我所缺少的简单的东西,所以我很感激任何关于为什么我看到重复的反馈。作为旁注,随着其中一个文本框中的数据发生变化,我也需要更新行总计,因此我可能需要一种不同的方法。有兴趣首先了解这种特殊情况......绝对不希望重复,因为可能有很多行。

这是一个例子:http://jsfiddle.net/dwahlin/Y7XbY/2/

最佳答案

这是因为你在这里绑定(bind)了一个函数表达式:

<td>{{calcRowTotal($index, row)}}</td>

它的作用是强制对每个项目、每个摘要重新评估该功能。要防止这种情况发生,您需要做的是预先计算该值并将其放入您的数组中。

一种方法是在阵列上设置 watch :

$scope.$watch('timesheetRows', function(rows) {
for(var i = 0; i < value.length; i++) {
var row = rows[i];
row.rowTotal = $scope.calcRowTotal(row, i);
}
}, true);

然后您所要做的就是绑定(bind)到该新值:

<td>{{row.rowTotal}}</td>

关于javascript - AngularJS 重复部分中多次调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com