我想做那样的somtehing:
angular.module('app', []).config(
[ '$httpProvider', 'customAuthService',
($httpProvider, customAuthService) ->
$httpProvider.defaults.transformRequest.push (data) ->
if customAuthService.isLoggedIn
data['api_key'] = {token: @token}
])
根据Angularjs doc,我无法在config
的{{1}}块中执行此操作,因为不允许自定义服务,也不能在module
中执行此操作1}}阻止,因为那里不允许像run
这样的提供者:
配置块 - 在提供商注册和配置阶段执行。只有提供程序和常量才能注入配置块。这是为了防止服务在完全配置之前意外实例化。
运行块 - 在创建注入器后执行并用于启动应用程序。只有实例和常量才能注入运行块。这是为了防止在应用程序运行时进一步进行系统配置。
如何在依赖自制服务的$httpProvider
中添加一些配置?
答案 0 :(得分:7)
总是可以获得一个注入器,然后获得回调函数内的服务实例('service locator'样式,而不是在config函数中注入依赖项)。
我认为对于特殊情况是好的,尽管不能广泛使用它。
.config([ '$httpProvider', function($httpProvider) {
$httpProvider.defaults.transformRequest.push(function(data) {
var $injector = angular.injector(['app']);
var customAuthService = $injector.get('customAuthService');
// ...
});
}])
但是,而不是这样做......
您是否查看了$http文档中的响应拦截器?
它看起来更适合身份验证用户,你可以在那里注入服务。
答案 1 :(得分:0)
据我所知,您可以将其注入配置内的功能。如果他们没有使用我的身份验证服务登录,我会使用类似拦截请求的东西。
.config(['$httpProvider',function ($httpProvider) {
var authRequest= ['customAuthService', function(customAuthService) {
if(customAuthService.isLoggedIn){
data['api_key'] = {token: @token};
}
}];
$httpProvider.defaults.transformRequest.push(authRequest);
}]);