Круговая зависимость найдена в angular js

Пытаюсь добавить заголовок перехватчика для каждого моего запроса, однако это дает мне ошибку ниже.

Uncaught Error: [$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')
        }

    }


})();

person user3563459    schedule 08.06.2018    source источник


Ответы (1)


Вы не можете этого сделать, потому что.

  1. Вы создали httpRequestInterceptor, который перехватывает все $http запросы.

  2. Теперь вы проходите Auth в httpRequestInterceptor.

  3. Как видите, Auth использует $http запрос внутри себя.

  4. Итак, ваш interceptor может сам вызвать http запрос с помощью Auth.

Следовательно, его циклическая ошибка и angularjs не позволят вам сделать это!

Удалите $http из фабрики Auth ИЛИ не вставляйте службу в перехватчик, который сам использует $http.

Надеюсь, вы поняли, как создается бесконечная цепочка циклов, отсюда и ошибка circular dependency!

person Shashank Vivek    schedule 08.06.2018
comment
Спасибо. Я удалил службу $http, и теперь она работает нормально. - person user3563459; 08.06.2018