2016-03-16 98 views
0

我正在嘗試獲取ng資源查詢方法上的內容。如何獲取ngResource查詢的內容[對象對象]

我廠擁有這樣

.factory('factoryName', ['$resource','API_URL', function ($resource,API_URL) { 
return $resource(
    API_URL+'route1/route2/:userId',{userId: '@_userId'}, 
    {    
     update: {method: 'PUT'}, 
     query:{method:'GET'} 
    } 

); 
}]) 

和我的控制器看起來像這樣

.controller('myCtrl',function($scope,$http,factoryName,userService){ 
    $scope.userId = userService.getUser().userId; 
    $scope.result =factoryName.query({userId:$scope.userId}) 
    console.log($scope.result) 

    }) 

我發現,這是記錄[對象對象],同時當我跟蹤的響應網絡,它執行得很好,並以我想要的結果進行響應。但我的$ scope.result是[對象對象]。我嘗試無盡的伎倆來獲取[對象對象]的內容,但我不能。

我也曾嘗試

.controller('myCtrl',function($scope,$http,factoryName,userService){ 
     $scope.userId = userService.getUser().userId; 
     factoryName.query({userId:$scope.userId}, 
     function(response){ 
     $scope.result = response 
     console.log(response) 
     }) 
    }) 

甚至不是給我任何東西。

我只是意識到,響應都出現在視圖

<div ng-app="myApp"> 
    <div ng-controller="myCtrl"> 

     <h2>{{result.something}}</h2> 

    </div> 
</div> 

了,但我不知道爲什麼它不是在控制檯登錄正確

回答

0

你的代碼對我來說看起來很好。我猜測控制檯在你的響應對象上調用toString()來記錄它之前正在玩弄一個技巧。console.log(JSON.stringify($scope.result));

編輯

你必須提供回調查詢(),第一回調是一個全成操作,第一個參數是的:

試圖通過其序列來驗證對象的內容查詢數據,不成功操作的第二個回調。 Here's a fiddle for you :)

+0

謝謝,它會返回:{「$ promise」:{「$$ state」:{「status」:0,「pending」:[[{「promise」:{「$$ state」:{「status」: 0}}},null,null,null]]}},「$ resolved」:false} – kplus

+0

忘記ngResource的性質,它確實使用異步操作,但不公開。你必須提供帶有回調的query(),第一個回調是成功的操作,第一個參數是查詢數據,第二個回調是不成功操作。這裏有一個小提琴給你: https://jsfiddle.net/theuntitled/m7ep1beg/2/ –

+0

謝謝,我做了類似的事情之前,我發現,它顯示在視圖中,但它不只是記錄在控制檯 – kplus

0

你有幾個問題你碼。

第一個是角度資源是異步的。這意味着

$scope.userId = userService.getUser().userId; 
$scope.result =factoryName.query({userId:$scope.userId}) 

這是行不通的。

你應該做這樣的事情:

$scope.user = userService.getUser(); 
$scope.user.$promise.then(function(user) { 
    $scope.result = factoryName.query({userId:user.userId}) 
}) 
+0

謝謝,我與用戶服務沒有問題,也沒有用戶ID,唯一的問題是獲取查詢的內容,這也執行良好,我可以看到瀏覽器網絡中的響應 – kplus

0

角NG-資源查詢是異步 - 它創造空數組(而不是加載的數據),並提供$承諾屬性,它包含了承諾,解決當數據加載完成時。這樣做的正確方法是

$scope.result = factoryName.query({userId:$scope.userId}); 
$scope.result.$promise.then(function() { 
    console.log($scope.result); 
}); 

此外,在其他的答案menotioned,同樣可能發生在用戶負載

+0

這不記錄 – kplus

0

到遠程服務器上的所有呼叫都以異步方式完成的,所以你不能同步分配導致您的範圍變量。有兩種方法可以處理這個問題。

https://docs.angularjs.org/api/ngResource/service/$resource

通過回調函數:

$scope.userId = userService.getUser(
    function(user) { 
    $scope.userId = user.userId 
    } 
); 

另一個(首選)選項是使用,後來推出了$資源服務$promise

$scope.userId = userService.getUser().$promise.then(
    function(user) { 
    $scope.userId = user.userId; 
    }, 
    function(err) { 
    $scope.err = err; 
    } 
); 
+0

謝謝,我與用戶服務沒有問題,也沒有用戶id,唯一的問題是獲取查詢的內容,這也執行得很好,我可以看到瀏覽器網絡中的響應。 – kplus