Подтвердить что ты не робот

Можно ли вводить $q и $http в секцию .config

Можно ли ввести $q в раздел конфигурации моего модуля? Ниже приведен пример раздела конфигурации.

.config(['$q', function ($q) {
    var func = function (inp) {
        var def = $q.defer();

        if (inp == 1)
            def.resolve("Success");
        else
            def.reject("Failure");

        return def.promise;
    };

    alert(func(1));
}]);

Первая ошибка, которую я получаю, - это Неиспользуемая ошибка: неизвестный поставщик: $q из ReportModule Если я изменяю

.config(['$q', function ($q) {}])

к

.config(['$qProvider', function ($q) {}])

тогда я получаю сообщение об ошибке Uncaught TypeError: Object # не имеет метода 'defer' из ReportModule

Кажется, что я не могу ввести $q в раздел конфигурации. Это дело, или я делаю что-то неправильно? У меня есть usecase, где мне нужно использовать $q и $http в разделе конфигурации моего модуля для инициализации. Есть ли какая-то техника для этого?

4b9b3361

Ответ 1

Правильно - вы не можете вводить $http или $q из функции конфигурации. Они еще недоступны (они также настроены!).

Ответ 2

Возможно (при настройке маршрутизации):

resolve: {
   simpleStringParam: ["$q", "$timeout", function($q, $timeout){
      var deferred = $q.defer();
          $timeout(function(){
              deferred.resolve("Allo!");
          },8000);
      return deferred.promise;
   }]
}

Ответ 3

Вы можете использовать angular.injector для загрузки $http и $q и, возможно, другие службы в вашем блоке конфигурации:

angular.module('myApp').config(function () {
    var injector = angular.injector(['ng']),
        http = injector.get('$http'),
        q = injector.get('$q');
});