用于对来自ng-repeat的特定字段的值求和的函数

时间:2016-01-25 21:05:20

标签: javascript angularjs

我想创建一个函数来对来自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正在运行,因为我有一个表,绑定工作正常。

截图。

enter image description here

2 个答案:

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