我想创建一个函数来对来自json中的Web服务的特定属性的值求和。
这是我的功能:
$scope.exportData = data;
$scope.totalLW = function() {
$scope.total=0;
for (var i =0; i < $scope.exportData.result.merchMetrics.SALES_AMOUNT_LW.length; i++) {
$scope.total += parseFloat($scope.exportData.result.merchMetrics.SALES_AMOUNT_LW);
}
return $scope.total;
}
在我看来,我把这个函数称为
<td ng-class = "{'positive':totalLW() >= 0, 'negative': totalLW()}">{{totalLW()}}</td>
但我在我的观点中得到了undefined
,我确定我的功能是错误的,所以我需要一些帮助来找出问题所在。
$scope.exportData
正在运行,因为我有一个表,绑定工作正常。
截图。
答案 0 :(得分:3)
我看到你忘了在for循环中使用数组值。
$scope.totalLW = function (){
$scope.total=0;
for(var i =0; i < $scope.exportData.result.merchMetrics.SALES_AMOUNT_LW.length; i++ ) {
$scope.total += parseFloat($scope.exportData.result.merchMetrics.SALES_AMOUNT_LW**[i]**);
}
return $scope.total;
}
是的,终于找到了你想念的那一点。你应该循环通过
$ scope.exportData.result 上的for (var i =0; i <$scope.exportData.result.length; i++)
不在 $ scope.exportData.result.merchMetrics.SALES_AMOUNT_LW
答案 1 :(得分:1)
视图将在数据存在之前调用该函数。
这意味着您将尝试获取视图首次初始化时不存在的对象的属性,这将导致错误
一种更简单的方法可能就是等待数据而不是在视图中使用函数
您可以使用Array.prototype.reduce()
获取数据到达时的总数:
$scope.total = data.result.merchMetrics.SALES_AMOUNT_LW.reduce(function(total, curr){
total += (parseFloat(curr.SALES_AMOUNT_LW) || 0);
return total;
},0)
查看
<td ng-class = "{'positive':total, 'negative': total < 0}">{{total || 0}}</td>