Не удается прочитать свойство 'длина' из неопределенного? пока подсчитать итого

0

Я хочу найти общую цену покупки. $ scope.salereports - мой json. он состоит из продуктов sub array.it содержит поля brice, количество.

Я пишу этот код

$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"
  • 0
    Убедитесь, что $scope.salereports.products содержит значение (массив)!
  • 0
    каков ваш результат JSON?
Показать ещё 4 комментария
Теги:

3 ответа

0
Лучший ответ

наконец, я получил ответ

$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;
}
  • 0
    это то же самое ... или очень похоже на мой ответ? если это так, вы должны поднять мой ответ и / или даже принять его как ответ ... в этом весь смысл StackOverflow. возможно, последний способ - иметь 2 уровня вложенности, но мой ответ, по крайней мере, указывает на проблему
2

Что делать, если у вас еще нет значений для salereports (скажем, если он 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>

(если ваше значение "no value" не undefined (если вы никогда не устанавливали его раньше), или если оно равно null, вы можете просто использовать его вместо этого. Или просто используйте if ($scope.salereports) {... }

  • 0
    if ($ scope.salereports.products.length! == undefined) {// код не исключает //}
  • 0
    if ($scope.salereports !== undefined)
Показать ещё 1 комментарий
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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню