2016-07-18 213 views
2

我正在使用$resource來向服務器發出請求。 我的代碼是無法訪問對象的屬性

service.js

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

我使用這個服務在控制器這樣

$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 

那麼,如何可以訪問從對象

+1

你需要把'.then'回調放在你的服務方法call..and裏面那個回調有成功和錯誤回調 –

+1

@PankajParkar你爲什麼不發表一個答案? – dfsq

回答

0

在你的違規行爲,承諾沒有解決。所以你無法訪問數據。 這裏,

$scope.userDetails = userService.me(); 


承諾沒有得到解決。當你展開你的對象時,你會看到resolved:false。雖然您將能夠看到您需要的$scope.userDetails內的數據。

所以,首先你需要等到承諾解決。爲此,你可以使用.then方法。

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

請編輯更多信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。 – abarisone

+0

@abarisone我會按照你的建議 – Ved

0

您的資源對象返回承諾。瞭解更多關於在這裏:​​https://docs.angularjs.org/api/ngResource/service/$resource

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

爲了獲取數據了它,你需要調用的承諾本身的方法。他們是GET,PUT和SAVE。

但是在這裏你只有一個GET提到那裏。

所以,如果你撥打

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

現在,「myResult」這裏有你自己返回的數據解決您的承諾。

它也可以這樣調用():

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

我要再次推薦閱讀角Docs軟件以便得到更好的理解。