javascript - 在angular js中发现循环依赖

标签 javascript angularjs angular-http-interceptors

试图为我的每个请求添加拦截器 header ,但是,它给我以下错误。

Uncaught Error: [$injector:cdep] Circular dependency found: $http <- Auth <- httpRequestInterceptor <- $http <- $templateRequest <- $route

应用程序.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. 您已经创建了拦截所有 $http 请求的 httpRequestInterceptor

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

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

  4. 因此,您的拦截器 本身可以使用Auth 引发http 请求。

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

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

我希望你明白了,无限循环链是如何创建的,因此产生了一个循环依赖错误!

关于javascript - 在angular js中发现循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50760594/

相关文章:

angular - 在 Angular Interceptors 中获取当前路线

javascript - 从 Web 浏览器获取 JavaScript 服务器时间的最快方法是什么?

php - 我无法使用 php 和 angularjs 使用更新功能将记录更新到数据库中

Angular 拦截器 - rxjs/map 响应字段

javascript - Angular ,限制子重复

java - 如何使用 angular 和 resteasy 在同一个请求中上传图像和数据?

javascript - Angular .js :68 Uncaught Error: [$injector:unpr] Unknown provider: pendingRequestsProvider <- pendingRequests <- $http <- $templateRequest <- $compile

javascript - 禁用文本选择的点击事件

javascript - 配置文件 Nashorn Javascript 执行?

javascript - DIV 内容根据 URL 隐藏/显示