2016-07-18 9 views
2

Ich verwende $resource für eine erholsame Anfrage an den Server. Mein Code istNicht in der Lage, auf die Eigenschaft eines Objekts zuzugreifen

service.js

.factory('userServ',function($resource){ 
    return $resource('url/:id',{id:'@id'},{ 
      me: 'GET',isArray:false,url:'url2'} 
}); 
}) 

Ich verwende diesen Dienst in der Steuerung wie diese

$scope.userDetails = userService.me(); 
console.log($scope.userDetails) // gives all the details of the user 
console.log($scope.userDetails.username) // gives undefined. But username is there in the object 

Wie kann ich auf das von dem Objekt

+1

Sie müssen '.then 'Callback über Sie Service-Methode Aufruf .. und innerhalb dieser Rückruf haben Erfolg und Fehler Rückruf –

+1

@ PankajParkar Warum posten Sie keine Antwort? – dfsq

Antwort

0

In Ihr aprach, Versprechen ist nicht gelöst. Sie können also nicht auf Daten zugreifen. Hier ,

$scope.userDetails = userService.me(); 


Versprechen wird nicht aufgelöst. Wenn Sie Ihr Objekt erweitern, sehen Sie resolved:false. Obwohl Sie in der Lage sein werden, Daten innerhalb $scope.userDetails zu sehen, die Sie benötigten.

Also, zuerst müssen Sie warten, bis Versprechen gelöst ist. Dafür können Sie .then Methode verwenden.

var CallApi = userService.me().$promise; //Promise yet to be Resolved 
     CallApi.then(function (res)){   //Promise resolved here 
     $scope.userDetails = res; 
     console.log($scope.userDetails) 
     console.log($scope.userDetails.username) 
     } 
    }) 
+1

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

+0

@abarisone Ich werde Ihrem Vorschlag folgen – Ved

0

Ihr Ressourcenobjekt gibt ein Versprechen zurück. Lesen Sie mehr darüber hier: https://docs.angularjs.org/api/ngResource/service/$resource

var myResource = $resource('url/:id',{id:'@id'},{ 
     me: 'GET',isArray:false,url:'url2'} 
}); 

Um die Daten aus ihm heraus zu bekommen Sie die Methoden der Verheißung selbst anrufen müssen. Sie sind GET, PUT und SAVE.

Aber hier haben Sie nur ein GET dort erwähnt.

Also, wenn Sie Ihr Versprechen lösen, indem

var myResult = []; 
myResource.then(function(data){ 
    myresult = date; 
}); 

Jetzt anrufen ‚MyResult‘ hier Ihre zurückgegebenen Daten haben.

Es kann auch so() aufgerufen werden:

.get({userId:123}) 
.$promise.then(function(user) { 
    $scope.user = user; 
}); 

Wieder würde ich empfehlen, die Winkel docs lesen ein besseres Verständnis zu bekommen.

Verwandte Themen