2016-04-20 6 views
0

Ich möchte Gesamtkaufpreis finden. $ scope.salreports ist mein json. es besteht aus Produkten sub array.it enthält Felder Brice, Menge.Kann die Eigenschaft 'Länge' von undefined nicht lesen? während berechnen insgesamt

Ich schreibe diesen Code

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

Ich habe den Fehler wie diese. Bitte sagen Sie mir, wie Sie das entfernen können.

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) 

das ist mein json Ergebnis:

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

Stellen Sie sicher, dass '$ scope.salereports.products' einen Wert (Array) enthält! –

+0

Was ist dein JSON-Ergebnis? –

+1

Der Fehler besagt eindeutig, dass "Verkaufsberichte" nicht definiert sind. Debuggen und herausfinden, warum es nicht definiert ist. Das können wir nicht mit dem bereitgestellten Code tun –

Antwort

0

schließlich bekam ich die Antwort

$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

ist es das gleiche ... oder sehr ähnlich zu meiner Antwort? Wenn ja, sollst du meine Antwort aufwerten und/oder sie sogar als Antwort akzeptieren ... das ist der ganze Sinn von StackOverflow. vielleicht ist der letzte Weg, zwei Ebenen der Verschachtelung zu haben, aber meine Antwort zeigt zumindest auf das Problem –

0

Versuchen Sie, diese

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

Was ist, wenn Sie noch nicht über die Werte für salereports (sagen wir, wenn es durch geholt wird ein Service), und die Funktion führt bereits die Berechnungen durch. Sie sollten also so etwas wie haben:

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

Sie können auch im HTML verwenden,

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

(Ihre „keinen Wert“ unter der Annahme undefined (wenn Sie es noch nie zuvor eingestellte) Oder wenn es. null ist, dann können Sie es einfach stattdessen. Oder benutzen Sie einfach if ($scope.salereports) { ... }

+0

if ($ scope.salereports.products.length! == undefined) {// code nicht executing //} – SrinivasAppQube

+0

'if ($ scope.salreports! == undefined)' –

+0

Danke für Ihre Anregung i habe die Antwort bekommen. – SrinivasAppQube

Verwandte Themen