Угловая зависимость

Впервые я столкнулся с этой проблемой, и я изо всех сил пытаюсь выяснить, почему и как ее исправить.

У меня есть две службы, 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 и использовать их от двух других.

Надеюсь это поможет.

Другие вопросы по тегам