2

我创建了三个服务,OpenApi、SecureApi 和 TokenHandler。我想使用 SecureApi 服务中的 TokenHandler 服务。当身份验证发生时,控制器代码将在 TokenHandler.Set() 方法中设置令牌。我希望 SecureApi 如下 cal tokenHandler.get() 。可能吗。现在我遇到以下错误:-

编辑: - 修复了以下错误(也更新了下面的代码,但我的令牌仍然没有通过作为标题的一部分:()

未知提供者:tokenHandlerProvider <- tokenHandler <- SecureApi

代码:-

/* Services */
angular.module('MyApp.services', ['ngResource'])
    .factory('OpenApi', function ($resource) {

        var openApi = $resource(
            '/api/:controller/:id',
            [],
            {
                postLogOn: { method: 'POST', params: { controller: 'Account' } },
                postCustomer: { method: 'POST', params: { controller: 'Employee' } }
            }
        );
        return openApi;
    })

.factory('TokenHandler', function () {
    var tokenHandler = {};
    var token = "none";

    tokenHandler.set = function (newToken) {
        token = newToken;
    };

    tokenHandler.get = function () {
        return token;
    };
    return tokenHandler;
})


   .factory('SecureApi', ['$resource', 'TokenHandler', function(res, tokHandler) { 
       var secureApi = $resource(
        '/api/:controller/:id',
        [],
        {
    getInsightCustomer: { method: 'GET', params: { controller: 'MyCustomer' }, headers: {Authorization_Token: tokenHandler.get()} }
        }
    );
       return secureApi;
   }]);
4

1 回答 1

1

我在 AngularJS googlegroups 中得到了这个答案:-

https://groups.google.com/forum/?hl=en&fromgroups=#!topic/angular/jfttVnvga9M

这是上面代码中的语法错误。

您的 TokenHandler 服务有一个大写的 T,但您的 SecureApi 服务正在“请求”带有小写 t 的 tokenHandler。一般来说,如果你要最小化你的 js 以使用数组注入格式,那么它会更好 - 也是必不可少的,这也允许你使用任何你喜欢的东西作为该服务的参数名称。例如:

.factory('SecureApi', ['$resource', 'TokenHandler', function(res, tokHandler) { ... }]);

于 2012-09-26T04:16:14.643 回答