我遇到了依赖捕获22.服务A必须在服务B之前运行才能安装服务B将使用的一些方法挂钩。但是,我希望其中一个已安装的方法使用服务B.在任何其他代码运行之前,服务A和B都将初始化,我的init逻辑负责。
对我来说,最简单的方法是使服务A安装一个使用服务B的方法,但在运行服务A安装的方法之前,实际上不会加载服务B.因此A可以在B之前运行,安装所需的所有钩子,但是在调用适当的方法时仍然可以使用服务B,这时B可以安全地进行初始化,因为A已经做了它的事情
在Angular中有一种方便的方法吗?看起来$ inject服务可能会这样做,但如果是这样,我不确定如何让它工作。
编辑:我之前没有添加psudo代码,因为我使用的示例使用了restangular并且会让人感到困惑。我试图想出一些类似的愚蠢的psudo代码示例,虽然我的实际情况不是那么直接,我不会得到循环依赖,只是奇怪的行为如果依赖关系不正确
angular.model('myProj.common').factory('RestCaller', funciton(){
var route:
return{ route: function(route) {
var get: function() { //does stuff };
var save: function() //does stuff
var getPermissions function(PermissionService) {
PermissionService.getPermissions(route);
}
};
});
angular.model('myProj.common').factory('PermissionService', funciton(RestCaller){
return{
getPermissions: function(route) {
return RestCaller.route(route).get();
}
}
)};
这里restCaller对一个方法使用PermissionService;但PermissionService使用RestCaller。如果我可以将PermissionService注入到getPermission方法中,那我就可以了。如果我必须将PermissionService注入工厂,它就不起作用;因为两者都相互依赖。
答案 0 :(得分:1)
如果我没有误解你的问题,这是你想要实现的目标吗?
app.factory('factoryName', function () {
return {
getA = //Your A Logic Here\\
getB: getB
};
function getB() {
return //Your B Logic Here\\;
}
});