在角js中找到循环依赖

use*_*459 2 javascript 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');
});
Run Code Online (Sandbox Code Playgroud)

验证服务

(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')
        }

    }


})();
Run Code Online (Sandbox Code Playgroud)

Sha*_*vek 6

你不能这样做因为.

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

  2. 现在,你是路过AuthhttpRequestInterceptor.

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

  4. 所以,你自己interceptor可以http使用Auth.

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

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

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