Angularjs使用$ resource获得响应的价值

时间:2013-04-24 16:42:36

标签: javascript angularjs

我正在尝试使用$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

如何获取实际返回的对象?我不是将它应用于任何模型,只是使用数据来确定一些路由。

谢谢!

3 个答案:

答案 0 :(得分: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:...},并在解析后,将我的响应对象中包含的其他字段添加到该对象。

希望这比之前的海报更有意义。

答案 1 :(得分: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方法都可用$前缀

答案 2 :(得分: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
    }
);