Угловая зависимость
Впервые я столкнулся с этой проблемой, и я изо всех сил пытаюсь выяснить, почему и как ее исправить.
У меня есть две службы, 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 ответа
Если вы увидите этот блог Miško Hevery, вы поймете, что:
...
.service 'serv1', ['$rootScope','$http','$location','serv2'
.service 'serv2', ['$rootScope','$http','$location','serv1',
Серв1 нужен серв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(...)
}
]
Используйте третий сервис, используйте этот третий сервис в других.
пример:
angular.module('service1',[])
.service 'serv1' [..,'servCommon', function(..,servCommon){}]
angular.module('service2',[])
.service 'serv2' [..,'servCommon', function(..,servCommon){}]
angular.module('serviceCommon',[])
.service 'servCommon' [.., function(..){}]
Добавьте некоторые общие функции в этом servCommon
и использовать их от двух других.
Надеюсь это поможет.