修复角度中的圆形依赖关系
Fix Circular Dependency in Angular
所以我有两个角度工厂,一个是用户相关的(用户登录了吗?与后端交谈并登录她)
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
对我来说很奇怪,两个不同的角度工厂不能有相同的注射,因为这些工厂有不同的名称,做不同的事情
我该如何解决这个问题?
谢谢
正如@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);
}
};
});
相关文章:
- 单元测试依赖关系没有被嘲笑
- FRP 中 EventStreams 的循环依赖关系
- 节点模块依赖关系
- 在Meteor中使用具有依赖关系的NPM包
- requirejs定义:嵌套依赖关系
- Django管道和javascript依赖关系
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- Npm未满足对等依赖关系
- Node.JS处理重复的可传递依赖关系
- 在Firefox上使用聚合物的javascript依赖关系的HTML导入困难;Safari
- 库中的匿名定义()模块's的依赖关系导致库损坏'的家属
- 使用Require.js按照依赖关系的顺序加载JavaScript
- GraphQL代码中的Javascript循环依赖关系
- 使用 grunt 检查单个 javascript 文件时如何解决依赖关系
- 与超类的依赖关系
- 在 Angular JS 业力测试中管理依赖关系
- 在 webpack 中管理 jQuery 插件依赖关系
- requirejs+bower,bower组件中的路径和依赖关系
- 预构建的NPM包:如何为用户省去依赖关系
- 聚合物种子-自定义元素依赖关系