代码之家  ›  专栏  ›  技术社区  ›  Nick

角度-循环依存关系

  •  1
  • Nick  · 技术社区  · 7 年前

    这是我有史以来第一次面对这个问题,我在努力找出原因和如何解决它。

    我有两个服务,服务1和服务2,但显然,存在这样的循环依赖:

    serv1 <- serv2 <- serv1
    

    angular.module('service1', [])
    .service 'serv1', ['$rootScope','$http','$location','serv2',
      function ($rootScope, $http, $location,  serv2){
        serv2.doMyOtherThing(...)
       }
    ]
    

    服务2如下:

    angular.module('service2', [])
    .service 'serv2', ['$rootScope','$http','$location','serv1',
      function ($rootScope, $http, $location,  serv1){
        serv1.doMyThing(...)
       }
    ]
    

    为什么存在循环依赖?我该如何解决这个问题?

    每个服务都是特定的(serv1 variou实用程序和serv2 array实用程序),有时我需要将两者结合使用,但目前不可能。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Youness HARDI    7 年前

    如果你看到这个 MiÅ¡ko Hevery's blog

    ...
    .service 'serv1', ['$rootScope','$http','$location','serv2'
    
    .service 'serv2', ['$rootScope','$http','$location','serv1',
    

    这个 需要 服务2 服务2 服务1

    所以你可以使用第三种服务

    angular.module('service1', [])
    .service 'serv1', ['$rootScope','$http','$location','serv2',
        function ($rootScope, $http, $location,  serv2){
            serv2.doMyOtherThing(...)
        }
    ]
    
    angular.module('service2', [])
    .service 'serv2', ['$rootScope','$http','$location','$injector',
        function ($rootScope, $http, $location,  $injector){
            var serv1 = $injector.get('serv1');
            serv1.doMyThing(...)
        }
    ]
    
        2
  •  1
  •   Rajesh Dan    7 年前

    使用第三种服务,在其他服务中使用第三种服务。

    例子:

    angular.module('service1',[])
    .service 'serv1' [..,'servCommon', function(..,servCommon){}]
    
    angular.module('service2',[])
    .service 'serv2' [..,'servCommon', function(..,servCommon){}]
    
    angular.module('serviceCommon',[])
    .service 'servCommon' [.., function(..){}]
    

    在其中添加一些常见功能 servCommon 并使用其他两个。