我创建了三个服务,OpenApi,SecureApi和TokenHandler。我想使用SecureApi服务的TokenHandler服务。当验证将发生时,控制器代码将在TokenHandler.Set()方法中设置令牌。我想要SecureApi来调用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;
}]);
答案 0 :(得分: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){ ... }]);