延迟注入角度服务直到函数运行

时间:2015-06-01 15:12:29

标签: angularjs

我遇到了依赖捕获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注入工厂,它就不起作用;因为两者都相互依赖。

1 个答案:

答案 0 :(得分:1)

如果我没有误解你的问题,这是你想要实现的目标吗?

app.factory('factoryName', function () {
  return {
    getA = //Your A Logic Here\\
    getB: getB
  };

  function getB() {
    return //Your B Logic Here\\;
  }
});