这是我如何设置拦截器的工作示例,该拦截器将身份验证令牌附加到每个请求(这或多或少是来自https://docs.angularjs.org/api/ng/service/ $http 的示例)
angular.module("app", [])
.config(function ($httpProvider) {
$httpProvider.interceptors.push("authInterceptor");
})
.factory("authInterceptor", function ($q) {
return {
// interceptor configuration here
}
})
我的config
和run
块中有很多其他的东西,它们从不同的角度模块调用和启动服务,所以我想稍微整理一下。但是我知道块中的依赖注入有一些非常具体的规则config
,我不太理解,这些规则阻止我authInterceptor
在单独的模块中定义我的工厂。当config
andrun
块中的其他逻辑调用应用程序中的其他模块时,在那里声明该拦截器看起来不合适。
这就是我想要做的:
angular.module("services.authInterceptor", [])
.factory("authInterceptor", function ($q) {
return {
// interceptor configuration here
}
});
angular.module("app", [
"services.authInterceptor"
]).config(function ($httpProvider, authInterceptor) {
$httpProvider.interceptors.push("authInterceptor");
});
// Error: Unknown provider authInterceptor.
我尝试将它注入到run
块中,但我猜你不允许在$httpProvider
那里注入:
angular.module("app", [
"services.authInterceptor"
]).run(function ($httpProvider, authInterceptor) {
$httpProvider.interceptors.push("authInterceptor");
});
// Error: Unknown provider: $httpProviderProvider <- $httpProvider
我应该在哪里注入模块以便$httpProvider
也可以注入,我应该在哪里将拦截器添加到现有的?我的主要目标是将拦截器和其他类似服务保留在它们自己的自包含模块中。
编辑
provider
当我声明 a而不是时,我得到一个不同的错误,这似乎让我更接近factory
(出于某种原因,我一直认为这些是可以互换的):
angular.module("services.authInterceptor")
.provider("authInterceptor", function ($q) {
return {}
})
// Error: Unknown provider: $q
所以它现在成功注入authInterceptor
到我的config
块中,但在尝试查找时失败$q
。