在angularjs中将资源包装在单个服务中?

时间:2013-04-27 05:02:37

标签: angularjs angular-resource

最近我发现TokenHandler允许我在每个其他api请求上发送令牌。您可以在此处找到详细说明:http://nils-blum-oeste.net/angularjs-send-auth-token-with-every--request/#.UXtYlbVTDIX

我正面临在我的项目中实现此处理程序的问题。我的项目涉及几个资源,让我谈谈发布作者。我目前正在做的是:

angular.module('PostService', ['ngResource']).factory(....
angular.module('AuthorService', ['ngResource']).factory(....

我将它包装在我的主app模块中

var app = angular.module('myApp', ['PostService', 'AuthorService']);

我的问题是,我在哪里设置TokenHandler?它必须分配给一个模块吗?我会把它分配到例如PostService但我不能在AuthorService中使用它吗?

因此,我有另一个问题。是否可以在一个服务中包装多个资源,如:

angular.module('RestService', ['ngResource']).factory(['Post', 'Author'],...

1 个答案:

答案 0 :(得分:2)

只需按照引文中的指南,声明 TokenHandler 服务:

  

angular.module('TokenHandler')。factory('TokenHandler',function(){...

并按以下方式配置您需要分配令牌的每项服务:

angular.module('AService', ['ngResource', 'TokenHandler']).factory('AService', ['$resource', 'TokenHandler', function($resource, tokenHandler) {
    var resource = $resource("http://...", {
        ...
    }, {
        get: {
            method:'GET', 
            params:{
                action:'get'
            }, 
            isArray:false
        },
        ...
    });

    resource = tokenHandler.wrapActions( resource, ["get", ...] );

    return resource;
}]);

您只需包装需要发送令牌的操作。 关于你的第二个问题,它不是一个好的编程实践,无论如何,工厂只返回一个对象。