拦截器中的循环依赖错误

时间:2018-05-30 14:43:42

标签: angularjs factory

我试图在我的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服务。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是$httpProvider$http服务的提供者,您告诉angular将Global工厂注入自定义拦截器,但您的Global工厂本身依赖于$http服务。这就是为什么它是一个循环依赖