Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角循环依赖_Angularjs_Dependency Injection_Circular Dependency - Fatal编程技术网

Angularjs 角循环依赖

Angularjs 角循环依赖,angularjs,dependency-injection,circular-dependency,Angularjs,Dependency Injection,Circular Dependency,这是我有史以来第一次面对这个问题,我在努力找出原因以及如何解决它 我有两个服务,service1和service2,但是很明显,有一个循环依赖关系如下: serv1 <- serv2 <- serv1 服务2如下所示: angular.module('service1', []) .service 'serv1', ['$rootScope','$http','$location','serv2', function ($rootScope, $http, $location,

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

我有两个服务,service1和service2,但是很明显,有一个循环依赖关系如下:

serv1 <- serv2 <- serv1
服务2如下所示:

angular.module('service1', [])
.service 'serv1', ['$rootScope','$http','$location','serv2',
  function ($rootScope, $http, $location,  serv2){
    serv2.doMyOtherThing(...)
   }
]
angular.module('service2', [])
.service 'serv2', ['$rootScope','$http','$location','serv1',
  function ($rootScope, $http, $location,  serv1){
    serv1.doMyThing(...)
   }
]
为什么存在循环依赖关系?我如何解决这个问题

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


感谢您的帮助

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

例如:

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

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

angular.module('serviceCommon',[])
.service 'servCommon' [.., function(..){}]
在该
servCommon
中添加一些常用函数,并从其他两个函数中使用它们

希望这能有所帮助。

如果你看到这一点,你就会明白:

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

.service 'serv2', ['$rootScope','$http','$location','serv1',
serv1需要serv2serv2需要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(...)
    }
]

为什么首先会发生这种循环依赖性问题?我不想在其他服务中重复我的功能,老实说,在这里这样做似乎不是件好事。angular DI尝试将
serv1
注入
serv2
,但是,虽然已经需要
serv2
来注入
serv1
,但是,请阅读更多关于DI和循环依赖性的内容如果你不想采用这种解决方法,那么你必须改变你的代码设计,这样就不会出现循环依赖性。我希望这会有所帮助。在我犯了一个小错误之前,我刚刚更新了答案:p