无法读取未定义的属性“长度”?而计算总数

时间:2016-04-20 06:09:04

标签: angularjs

我想找到总购买价格。 $ scope.salereports是我的json。它由products子数组组成。它包含字段brice,quantity。

我写这段代码

$scope.BuyingAmount=function(){
 var buyamount = 0;
for(var i = 0; i<$scope.salereports.products.length; i++){
     item=$scope.salereports.products[i]
    buyamount+=(item.brice*item.qty)
}
console.log(buyamount)
return buyamount;
}

我得到了这样的错误。请告诉我如何删除它。

angular.js:12520 TypeError: Cannot read property 'products' of undefined
at Scope.$scope.BuyingAmount (EmpController.js:891)
at fn (eval at <anonymous> (angular.js:13365), <anonymous>:4:227)
at Object.expressionInputWatch [as get] (angular.js:14345)
at Scope.$digest (angular.js:15888)
at Scope.$apply (angular.js:16160)
at done (angular.js:10589)
at completeRequest (angular.js:10787)
at XMLHttpRequest.requestLoaded (angular.js:10728)

这是我的json结果:

Resource
$$hashKey:"object:15"
__v:0
_id:"5716fe9ef93044a01183dd29"
createdat:"2016-04-20T03:59:26.820Z"
customername:"Agarwal"
customerno:"989987987"
discamount:90
discount:20
grandtot:360
isDeleted:false
modifiedat:"2016-04-20T03:59:26.820Z"
ordernumber:"1112121"
products:Array[1]
0:Object
$$hashKey:"object:19"
_id:"5712257366dfa48c16d481d6"
bprice:100
created:"2016-04-20T03:59:26.822Z"
productname:"bata"
qty:3
size:7
sprice:150
__proto__:Object
length:1
__proto__:Array[0]
soldby:"admin"

3 个答案:

答案 0 :(得分:3)

如果您还没有salereports的值(例如,如果服务正在提取),并且该函数已在进行计算,该怎么办?所以你应该有类似的东西:

$scope.BuyingAmount = function() {
  var buyamount = 0;
  if ($scope.salereports !== undefined) {
    for (var i = 0; i < $scope.salereports.products.length; i++) {
      item = $scope.salereports.products[i]
      buyamount += (item.brice * item.qty)
    }
  }
  console.log(buyamount)
  return buyamount;
}

您也可以在HTML中使用

<div ng-if="salereports !== undefined">
  {{ BuyingAmount() }}
</div>

(假设你的“无价值”是undefined(如果你之前没有设置过)。或者如果它是null,那么你可以改用它。或者,只需使用{{1 }}

答案 1 :(得分:1)

最后我得到了答案

$scope.BuyingAmount=function(){
    var buyamount = 0;
if ($scope.salereports !==undefined) {
    for(var i = 0; i<$scope.salereports.length; i++){
    for (var j=0;j<$scope.salereports[i].products.length;j++){

      item=$scope.salereports[i].products[j]

      buyamount=item.bprice*item.qty+buyamount;

}
}
            }    
console.log(buyamount)
return buyamount;
}

答案 2 :(得分:0)

试试这个

$scope.BuyingAmount=function(){
 var buyamount = 0;
for(var i = 0; i<$scope.salereports.products.length; i++){
     buyamount+=$scope.salereports.products[i].brice * $scope.salereports.products[i].quantity; 
}
console.log(buyamount)
return buyamount;
}