我试图在我的Request Interceptor中使用一个工厂,但我得到一个循环依赖错误。我不了解AngularJS上的所有内容,但我知道注射器正试图获得依赖自己的服务。
我的工厂" Global"用于发出一些HTTP请求并在屏幕上显示错误消息。
以下是我尝试导入工厂的方法:
app.factory("authInterceptor", authInterceptor);
authInterceptor.$inject = ["$q","Global"];
function authInterceptor($q,Global) {
return {
// Add an interceptor for any responses that error.
'responseError': function (response) {
// Check if the error is auth-related.
if (response.status === 401 || response.status === 403) {
Global.show_fail("Connection expired, please authenticate again");
}
return $q.reject(response);
}
};
}
app.config(["$httpProvider",
function ($httpProvider) {
//Registers the interceptor
$httpProvider.interceptors.push("authInterceptor");
}]);
这是angularjs.org上的错误
找到循环依赖项:$ http< - Global< - authInterceptor< - $ http < - $ templateRequest< - $ compile
以下是我在global.js中使用的服务:
app.factory('Global', ['$rootScope', '$http','$mdDialog','$timeout', function($rootScope, $http, $mdDialog, $timeout){ ... }
这个错误有什么原因吗?
提前致谢。
编辑:
我已从全球工厂删除了$ http服务,并将我的请求驱逐到另一个档案中。
现在我得到了
$ templateRequest< - $$ animateQueue< - $ animate< - $$ interimElement< - $ mdDialog< - Global< - authInterceptor< - $ http< - $ templateRequest< - $编译
但是我不明白我从来没有打过这个$ templateRequest服务。 有什么想法吗?
答案 0 :(得分:1)
问题是$httpProvider
是$http
服务的提供者,您告诉angular将Global
工厂注入自定义拦截器,但您的Global
工厂本身依赖于$http
服务。这就是为什么它是一个循环依赖