Angular将$http拦截器创建为独立模块时的依赖错误
Dependency errors in Angular when creating an $http interceptor as a standalone module
下面是我如何设置一个拦截器的工作示例,该拦截器将身份验证令牌附加到每个请求(这或多或少是来自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
和run
块中的其他逻辑调用应用中的其他模块时,声明拦截器在那里看起来不合适。
这就是我想要做的:
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
而不是factory
(出于某种原因,我一直认为这些是可互换的)时,我得到了一个不同的错误,似乎让我更接近:
angular.module("services.authInterceptor")
.provider("authInterceptor", function ($q) {
return {}
})
// Error: Unknown provider: $q
所以它现在成功地注入authInterceptor
到我的config
块,但失败时试图找到$q
。
在配置阶段,只能注入提供程序和常量。这是为了防止服务在完全配置之前被实例化。
这就是为什么你按名称注册拦截器(将名称作为字符串推入$httpProvider.interceptors
数组)。它们将在运行时稍后解析。
这正是你在工作示例中所做的,也是你在第二个示例中需要做的,即使拦截器在另一个模块中:
angular.module("services.authInterceptor", [])
.factory("authInterceptor", function ($q) {
return {
// interceptor configuration here
}
});
angular.module("app", ["services.authInterceptor"])
.config(function ($httpProvider) {
$httpProvider.interceptors.push('authInterceptor');
});
演示:http://plnkr.co/edit/A8SgJ87GOBk6mpXsoFuZ?p=preview
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 定义完全独立的样式信息
- 如何更改reactjs中外部/独立组件的状态或属性
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 如何在 AngularJS 中的两个独立模块之间共享数据
- 具有独立入口点的webpack可重复使用模块
- 如何在reduxjs中设计独立模块
- Browserify独立(UMD)模块的测试覆盖率
- 如何从一个完全独立的模块控制器中调用模块的控制器函数?
- 一个需求模块gl的两个独立实例
- Angular将$http拦截器创建为独立模块时的依赖错误
- requirejs, almond:一个用almond构建的独立模块会加载所有依赖项,但不会执行主代码