Angular Ввести $http в конфигурацию или провайдер в запуск

Я использую angular-route-сегмента в моем угловом приложении и пытаюсь настроить сегменты из канала json.

У меня проблемы с этим, потому что я не могу понять, как вводить $http в app.config функция. Это не с Unknown provider: $http

myApp.config(["$http", "$routeSegmentProvider", function ($http, $routeSegmentProvider) {
   /* setup navigation here calling $routeSegmentProvider.when a number of times */
}

Таким образом, вместо введения $ http в configЯ тоже пробовал вводить $routeSegmentProvider в myApp.run

myApp.run(["$http", "$routeSegment", function($http, $routeSegment) {
    /* can use $http here to get data, but $routeSegment is not the same here */
    /* $routeSegment does not have the when setup method */
}]);

Я тоже пробовал

myApp.run(["$http", "$routeSegmentProvider", function($http, $routeSegmentProvider)

но я получаю Unknown provider: $routeSegmentProviderProvider <- $routeSegmentProvider

1 ответ

Решение

Поставщики могут быть введены только в фазе "config", а не в фазе "run". И наоборот, такая служба, как $ http, еще не была инициализирована на этапе "config" и будет доступна только на этапе "run".

Небольшой трюк, чтобы обойти это, - определить переменную в области родительской функции, чтобы к ней могли иметь доступ как блоки config, так и run:

var routeSegmentProvider = null;

myApp.config(["$routeSegmentProvider", function ($routeSegmentProvider) {
    routeSegmentProvider = $routeSegmentProvider;
}]);

myApp.run(["$http", function($http) {
  // access $http and routeSegmentProvider here
}]);

Я не уверен, что у вас возникнут проблемы при попытке вызова $routeSegmentProvider.setup() на этапе выполнения, поскольку я не пробовал. В прошлом я мог использовать ту же технику для регистрации перехватчиков ответа http, которые зависят от некоторых пользовательских сервисов, с $httpProvider.

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