所以我有两个角度的工厂,一个与用户相关的工厂(用户登录?与后端通话并登录她)
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 :(得分: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);
}
};
});