角度 - 循环依赖

时间:2017-08-02 07:36:45

标签: angularjs dependency-injection circular-dependency

我有史以来第一次遇到这个问题而且我在努力弄清楚为什么以及如何解决这个问题时遇到了很多困难。

我有两个服务,service1和service 2,但显然,这是一个循环依赖:

serv1 <- serv2 <- serv1

服务代码如下:

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

和service2如下:

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

为什么会出现循环依赖?我该如何解决这个问题?

每个服务都是特定于某些东西(serv1 variou实用程序和serv2数组实用程序),我需要有时使用这两个服务,但目前不可能。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

示例:

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

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

angular.module('serviceCommon',[])
.service 'servCommon' [.., function(..){}]

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

希望这有帮助。

答案 1 :(得分:1)

如果你看到这个Miško Hevery's blog,你会理解:

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

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

serv1 需要 serv2 serv2 需要 serv1 。这将培养循环依赖。

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

或者你可以这样解决这个问题:

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(...)
    }
]