Angular:在模块's的config/run中混合了提供商和自定义服务
Angular: Mixing provider and custom service in module's config/run
我想这样做:
angular.module('app', []).config(
[ '$httpProvider', 'customAuthService',
($httpProvider, customAuthService) ->
$httpProvider.defaults.transformRequest.push (data) ->
if customAuthService.isLoggedIn
data['api_key'] = {token: @token}
])
根据Angularjs文档,我不能在module
的config
块中这样做,因为那里不允许自定义服务,我也不能在run
块中这样做,因为那里不允许$httpProvider
这样的提供商:
配置块 -在提供程序注册和配置阶段执行。只有提供程序和常量可以注入到配置块中。这是为了防止服务在完全配置之前意外实例化。
运行块 -在注入器创建后执行,用于启动应用。只有实例和常量可以注入到运行块中。这是为了防止在应用程序运行时进行进一步的系统配置。
如何在我的$httpProvider
中添加一些依赖于自制服务的配置?
总是有可能先获得一个注入器,然后在回调函数中获得该服务的实例('服务定位器'风格,而不是在config函数中注入依赖项)。
我想在特殊情况下是可以的,尽管不太适合广泛使用。
.config([ '$httpProvider', function($httpProvider) {
$httpProvider.defaults.transformRequest.push(function(data) {
var $injector = angular.injector(['app']);
var customAuthService = $injector.get('customAuthService');
// ...
});
}])
但是,不是那样做…
你看过$http文档中的响应拦截器吗?
它看起来更适合于身份验证目的,您可以在那里注入服务。
据我所知,你可以将它注入到配置中的函数中。我使用类似的东西拦截请求,如果他们没有使用我的认证服务登录。
.config(['$httpProvider',function ($httpProvider) {
var authRequest= ['customAuthService', function(customAuthService) {
if(customAuthService.isLoggedIn){
data['api_key'] = {token: @token};
}
}];
$httpProvider.defaults.transformRequest.push(authRequest);
}]);
相关文章:
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 混合元素的有角度的ng重复
- VueJS多个混合
- Ember run.debounce not working
- 如何在Nike Run Club页面上执行列表css
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 如何对混合格式的数字(89900,1k,1.5k,15.2k)进行排序
- AngularJS在.run中等待Resource
- 过滤”;溢价;页面加载选项使用混合
- 将javascript与PHP混合?(跟踪Google Analytics虚拟页面浏览量)
- Angular2, doe's EventEmitter require zone.run?
- 在混合基本 URL 下动态加载 require.js 模块
- javascript散列/数组混合性能
- 如何通过ibmworklight中的sql适配器从db2中检索或显示html页面上的数据?android混合应用程序开发
- Ember.run.bind 不起作用
- 如何在 VB 项目中混合使用 Razor 和 Javascript
- 混合类型提前.js和引导 3.
- 混合 Web/客户端框架
- 如何在树枝模板中包含已解释和未解释文本的混合
- Angular:在模块's的config/run中混合了提供商和自定义服务