当app.js使用工厂角“CDEP循环依赖错误:$注射器”(Angular 'Error:

2019-09-28 21:32发布

我试图使用令牌来处理我的用户认证。 我打在路上颠簸和我不完全知道从哪里何去何从。 我四处张望了一下,它看起来像我应该使用$injector的服务,但我不是100%肯定。 谁能请帮助?

我创建了一个工厂,从节点获得令牌:

angular.module('myApp').factory('authenticateInterceptor', function(authenticateToken){

var authenticateInterceptorFactory = {};

authenticateInterceptorFactory.request = function(config){

    var token = authenticateToken.getToken();

    if(token){
        config.headers['x-access-token'] = token;
    };

    return config;
}

return authenticateInterceptorFactory;

});

下面是autenticateToken的代码:

angular.module('myApp').factory('authenticateToken', function($http, $window){

    authenticateTokenFactory = {};

    authenticateTokenFactory.getToken = function(token){
        return $window.localStorage.getItem('token');
    };

    return authenticateTokenFactory;

});

有没有错误,在这里,问题就来了时,我尝试在我的app.js使用此工厂。

angular.module('myApp', [
    'dependancies goes here'
])
.config(function($httpProvider){
    $httpProvider.interceptors.push('authenticateInterceptor');
});

现在,这会导致该错误,我似乎无法到我厂进入拦截。

Answer 1:

最有可能的循环依赖是由注射引起的$http服务中authenticateToken

冲突的存在是因为在引导阶段的角度尝试解决$http顺序依赖关系(以及其他核心服务)。

  1. $httpProvider依赖
  2. authenticateInterceptor依赖
  3. authenticateToken依赖(包括$http ,在这里,我们回到1)

顺便说一句,因为$http服务未在authenticationFactory使用你甚至可以去除注射,但如果你需要的服务,您可以尝试只需要避免这种行为动态地将其注入。

angular.module('myApp').factory('authenticateToken', function($injector, $window){

    authenticateTokenFactory = {};

    authenticateTokenFactory.getToken = function(token){
        return $window.localStorage.getItem('token');
    };

   authenticateTokenFactory.otherMethod = function(){
    //this code is not reached when your interceptor is added to 
    //$httpProvider interceptors array so theorically neither the exception
     var http = $injector.get('$http');
     http.get (/)...

   }

    return authenticateTokenFactory;

});


文章来源: Angular 'Error: $injector:cdep Circular Dependency' when using factory in app.js