Разрешение зависимости для $state.go в Angular UI Router

У меня есть провайдер конфиг, который использует $state.go прыгать в штаты. Когда я использую $state в качестве параметра функции он работает, но когда я пытаюсь изменить параметры функции для поддержки минификации, такие как

.provider('Navigation',["$stateProvider","$state",function($stateProvider,$state)

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

Uncaught Error: [$injector:modulerr] Failed to instantiate module apfPrototypeJs due to:
Error: [$injector:unpr] Unknown provider: $state

Как обойти эту проблему?

1 ответ

Решение

Вы можете только ввести providers в провайдере, поскольку в этот момент еще не созданы экземпляры сервисов, а также потому, что методы провайдера используются специально для конфигурирования, доступ к ним можно получить только на этапе настройки приложения, поэтому нет смысла иметь возможность внедрять какие-либо сервисы, Но Вы можете внедрить любой сервис (не провайдер) в функцию конструктора провайдера, определенную через $get имущество.

т.е.

.provider('Navigation',["$stateProvider",function($stateProvider) { //Inject provider here

   this.$get = ["$state", function($state){ //Inject $state here
       console.log($state) 
   }]
}]);

В качестве альтернативного синтаксиса (используя $ inject для поддержки минификации) вы можете сделать:

.provider('Navigation', function(){

    this.$get  = navigationService;

    navigationService.$inject = ['$state'];

    function navigationService($state) {
      console.log($state)
    }
}]);
Другие вопросы по тегам