Разрешение зависимости для $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)
}
}]);