在角js中找到循环依赖

时间:2018-06-08 12:23:21

标签: angularjs angular-http-interceptors

为我的每个请求添加拦截器标头,然而,它给了我以下错误。

未捕获错误:[$ injector:cdep]找到循环依赖项:$ http< - Auth< - httpRequestInterceptor< - $ http< - $ templateRequest< - $ route

app.js

var app= angular.module('myDemoApp',['ngRoute'])


app.factory('httpRequestInterceptor', ['Auth', function (Auth) {
  return {
    request: function (config) {

      config.headers['x-access-token'] = Auth.getToken();
      return config;
    }
  };
}]);

app.config(function ($httpProvider) {
  $httpProvider.interceptors.push('httpRequestInterceptor');
});

验证服务

(function () {
    'use strict';

    myDemoApp.factory('Auth', ['$http', '$window', Auth]);

    /******Auth function start*****/
    function Auth($http, $window) {
        var authFactory = {};

        authFactory.setToken = setToken;
        authFactory.getToken = getToken;
        return authFactory;


        /*setToken function start*/
        function setToken(token) {

            if (token) {
                $window.localStorage.setItem('token', token);
            } else {
                $window.localStorage.removeItem('token');
            }

        }

        /*getToken function start*/
        function getToken() {
            return $window.localStorage.getItem('token')
        }

    }


})();

1 个答案:

答案 0 :(得分:6)

你不能这样做因为。

  1. 您已创建httpRequestInterceptor拦截所有$http次请求。

  2. 现在,您正在Auth中传递httpRequestInterceptor

  3. 如果您看到,Auth在其内部使用$http请求。

  4. 因此,您的interceptor本身可以使用http生成Auth请求。

  5. 因此,它的循环错误和angularjs不允许你这样做!

    $http工厂删除Auth不要将服务插入拦截器,拦截器本身使用$http

    我希望你得到,如何创建无限循环链,因此出现circular dependency错误!