2013-04-24 92 views
3

我試圖讓使用$resource請求的響應得到響應的值,例如我有:

angular.module('app').factory('AuthResource', ['$resource', function($resource) { 
    return { 
     isAuthenticated : function() { 
      return $resource('/api/v1/auth/authenticated').query(); 
     } 
    } 
}]); 

然後在我的控制,我調用這個服務,做:

console.log(AuthResource.isAuthenticated()); 

這不會返回實際結果,它只是單個對象{'success' : 'true'}

相反,它返回:

Resource {$resolved: false, $then: function, $get: function, $save: function, $query: function…} 
$resolved: true 
$then: function (callback, errback) { 
success: false 
__proto__: Resource 

我如何去獲得實際返回的對象?我沒有將這個應用到任何模型,只是使用數據來確定一些路由。

謝謝!

+0

退房[這個答案] [1],它幫了我 [1]:http://stackoverflow.com/a/16197255/1505895 – paynestrike 2013-06-28 01:34:57

回答

2

只需修改你的代碼如下

angular.module('app').factory('AuthResource', ['$resource', function($resource) { 
    return { 
     isAuthenticated : function() { 
      return $resource('/api/v1/auth/authenticated') 
     } 
    } 
}]); 

--controller 
AuthResource.isAuthenticated().query(function(data){ 
console.log(data); 
}); 

當數據從服務器返回,則對象是資源類型的實例以及所有的非GET方法可用以$前綴

+0

這仍然返回'[Resource,$ resolved:true,$ then:function]' – dzm 2013-04-24 17:50:25

+1

當從服務器返回數據時,對象是資源類型的一個實例,所有非GET方法都可用$ prefix – 2013-04-24 19:42:06

+0

此解決方案工作正常。 – taco 2015-01-12 18:35:39

3

我建立這樣一個測試:

var status = {}; 
$httpBackend.expectGET("/api/Accounts/AuthenticationStatus").respond(status); 

然後,我有一種期待:

expect(actual).toBe(status); 

我收到以下錯誤:

Expected { $resolved : true, $then : Function } to be { }. 

抓我的頭很長一段時間之後,我終於明白了,在get()函數返回的對象是永遠不會是完全一樣的對象我設置了$ httpBackend服務來響應,但它會返回基礎對象{$ resolved:...,$ then:...},並且在解析時,將包含在我的響應對象中的附加字段添加到該對象中目的。

希望比以前的海報更有意義。

0

你可以根據這裏的答案https://stackoverflow.com/a/11856710/1371408解決方案。喜歡的東西:

AuthResource.isAuthenticated(
    {}, // params (ie. none) 
    function (data) { // success callback 
     // do what you want with values returned from successful request, contained in 'data' 
    }, 
    function (error) { 
     console.log(error); // Error details 
    } 
);