2015-08-18 2 views
-1

Я пытаюсь использовать angular.injector в качестве локатора сервисов для извлечения службы в базовом классе, из которого производятся многие контроллеры. Я делаю это, потому что я не хочу изменять подпись конструктора из десятков контроллеров, чтобы получить экземпляр моего сервиса. Я более чем счастлив пожертвовать тем, что у меня есть служба изгоев, чтобы избежать много рискованной работы над моими контроллерами.angular.injector не ведет себя так, как предполагалось

Мой базовый контроллер выглядит следующим образом:

Моя служба выглядит следующим образом:

module Services { 
    "use strict"; 

    export class MyService { 
     static $inject = ["$modal"]; 

     private modal; 
     private modalInstance; 

     constructor($modal) { 
      this.modal = $modal; 
     } 

     public myServiceMethod() { 
      // do something with $modal 
     } 
    } 
} 

Ошибка на линии в мой контроллер выглядит следующим образом:

Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $animate <- $compile <- $modalStack <- $modal <- ApplicationErrorService 

Неужели я не понимаю функции инжектора? Является ли проблема, что я не могу создать экземпляр службы, потому что сама служба имеет зависимости, которые невозможно решить?

Большое спасибо за любую помощь по этому вопросу.

+0

Поскольку я читал его, похоже, что у вас может быть недостающая зависимость от ngAnimate. –

+0

Почему вы просто не вводите 'MyService' в контроллер, не уверен, понимаю ли я, почему вам нужно его получить, создав инжектор? Также вы могли бы просто создать конструктор (защищенный qService: angular.IQService) {' – PSL

+0

Я не могу вводить MyService, потому что это означало бы изменение всех производных контроллеров, передаваемых в ссылке на службу. – serlingpa

ответ

0

Есть проблему, что я не могу создать экземпляр службы, потому что сама служба имеет зависимость, которые не могут быть решены

Да. В частности, $rootElement недоступен. Это признак того, что код выполняет до angular был загружен: https://docs.angularjs.org/api/ng/function/angular.bootstrap

+0

Но ошибка не возникает до тех пор, пока не будет удалена строка, аннотированная выше. – serlingpa

Смежные вопросы