2013-12-24 3 views
3

У меня есть следующее определение завода в моем angularjs спе:Циклическая ссылка исключения в angularjs

(function() { 
    'use strict'; 

    angular.module('snApp') 
    .factory('Auth', ['$http', 'localStorageService', function ($http,  localStorageService) { 

    //code goes here 
    }]); 
})(); 

, а затем в моей конфигурации для моего приложения, у меня есть следующие настройки HTTP-перехватчик:

var app = angular.module('snApp', ['ui.router', 'LocalStorageModule', ]) 
.config(['$logProvider', '$stateProvider', '$urlRouterProvider', '$httpProvider',  '$provide', function ($logProvider, $stateProvider, $urlRouterProvider, $httpProvider,  $provide) { 

    // Intercept http calls. 
    $provide.factory('RequestHttpInterceptor', function ($q, Auth) { 
     return { 
      // On request success 
      request: function ($config) { 
       if (Auth.user) { 
        $config.headers['XToken'] = Auth.user.token; 
       } 
       return $config; 
      } 
     }; 
    }); 
    // Add the interceptor to the $httpProvider. 
    $httpProvider.interceptors.push('RequestHttpInterceptor'); 
}]); 

Когда я запустить приложение, я получаю следующее сообщение об ошибке:

Uncaught Error: [$injector:cdep]

Я думаю, что это имеет какое-то отношение к $ http в моем Auth, потому что если я удалю это, тогда это сработает, но мне это нужно!

Если кто-то может помочь мне понять, что я делаю неправильно, это было бы фантастически!

ответ

5

Хорошо, я понял. Поскольку его перехватчик http, угловой не нравится тот факт, что вы переходите в $ http на свой завод, - что имеет смысл, потому что если вы вызовете $ http в http-перехватчике, он вызовет перехватчик, который будет вызывать $ http , и т. д. и т.д., получая этот бесконечный цикл.

К счастью, мне просто нужна была собственность на заводе, поэтому я отвлек ее от фабрики Auth, так что $ http wasnt need. Есть и другие способы сделать это, но это было лучшее решение для меня.

2

Вы все еще можете ввести $injector и создать $http, если требуется. Для некоторых примеров см. here.

Другой вариант - испустить/транслировать сообщение и зафиксировать его в другом месте (например, как часть прогона.)

Смежные вопросы