2016-02-18 2 views
0

Поэтому у меня есть две фабрик в угловом, одна из которых является пользователь, связанным с (пользователь авторизован? Поговорить с фоновым и войти с ней в)Фикса циклическая зависимость в Угловых

app.factory('userFactory', function($window, $location, $http) { 
     var loggedUser = {}; 

     loggedUser.isLogged = false; 

     loggedUser.check = function() { 
      if($window.sessionStorage.user) {   
       this.isLogged = true; 
      } else { 
       this.isLogged = false;    
      } 
     }   

     loggedUser.doLogin = function (theData) {     
       var promise = $http({method: 'POST', url: 'http://whatevah/login', data: theData});     
       return promise;    
     } 

     return loggedUser; 

    });    

и тот, который связан с перехватчиком (отправьте токен и возьмите ответ, чтобы узнать, вошел ли пользователь в систему).

app.factory('tokenFactory', function($q, $window, $http) { 
    return { 
     request: function(config) { 
     config.headers = config.headers || {}; 
     if ($window.sessionStorage.token) { 
      $http.defaults.headers.common['mytoken'] = $window.sessionStorage.token; 
     } 
     return config || $q.when(config); 
     }, 

     response: function(response) { 
     return response || $q.when(response); 
     } 
    }; 
    }); 

Они оба $http впрыскивается, что вызывает эту ошибку

Circular dependency found: $http <- tokenFactory<- $http <- userFactory

Его странно мне, что два различных заводов в угловой не могут иметь такую ​​же инъекцию, так как заводы имеют разные названия и делать разные вещи

Как это исправить?

Благодаря

+0

вы можете привести пример в codepen или jsbin? это не должно быть проблемой круговых зависимостей – eltonkamami

+2

Не уверен, что это ваша проблема, но кажется правдоподобной: если перехватчик зависит от '$ http', это круговая зависимость: http://stackoverflow.com/questions/20647483/angularjs- инъекция-сервис-в-HTTP-перехватчик-круговая зависимость? rq = 1 – mzulch

+0

@antoniskamamis Antonis, я обновил свой оригинальный пост. Теперь есть больше кода, если вы хотите взглянуть. Я не использую какой-либо метод или данные 'loggedUser' в' tokenFactory', так что это действительно странно для меня. Ευχαριστω – slevin

ответ

1

Как @mzulch комментировал, вы не можете зависеть от $ HTTP на заводе, который используется в качестве HTTP-перехватчика.

В вашем случае, самым простым решением является просто установить заголовки запроса, вместо глобальных заголовков:

app.factory('tokenFactory', function($q, $window) { 
    return { 
    request: function(config) { 
     config.headers = config.headers || {}; 
     if ($window.sessionStorage.token) { 
     config.headers['mytoken'] = $window.sessionStorage.token; 
     } 
     return config || $q.when(config); 
    }, 

    response: function(response) { 
     return response || $q.when(response); 
    } 
    }; 
}); 
Смежные вопросы