Sergamers
@Sergamers
front-end

Ошибка использования сервиса в своем сервисе?

angular.module('cool')
.provider('AllComment', function ($http) {
  var ctrl = 'AllCommentCtrl';
  return {
    setCtrl: function (data) {
      ctrl = data;
      return this;
    },
    $get: function () {
      console.log(ctrl);
    }
  }
});


Выводит
Uncaught Error: [$injector:modulerr] Failed to instantiate module cool due to:
Error: [$injector:unpr] Unknown provider: $http

Как добавить сервис?
  • Вопрос задан
  • 146 просмотров
Решения вопроса 2
AlexXYZ
@AlexXYZ
O Keep Clear O
Update: неправильно так править код. См.: stackoverflow.com/questions/17497006/use-http-insi...

Код немного поправьте:

angular.module('cool')
.provider('AllComment', ["$http", function ($http) {
  var ctrl = 'AllCommentCtrl';
  return {
    setCtrl: function (data) {
      ctrl = data;
      return this;
    },
    $get: function () {
      console.log(ctrl);
    }
  }
}]);
Ответ написан
@bromzh
Drugs-driven development
В провайдер нельзя инжектить сервисы, только другие провайдеры (и константы). Связано это с тем, что провайдер можно внедрять на стадии конфига, чтобы иметь возможность сконфигурировать сервис. Во время стадии конфига сервисы ещё недоступны, так что внедрить их не выйдет.

Если у тебя провайдер, то сервисы нужно внедрять в твой сервис. т.е. в функцию, которая в поле $get:
angular.module('foo')
    .provider('$foo', ['сюда внедрять только провайдеры и константы, не сервисы', function (...) {
        return {
            $get: ['а сюда можно внедрить сервисы', function (...) { }
        };
    }
]);

// Или в более читабельном виде:

angular.module('foo')
    .provider('foo', fooProvider);

fooProvider.$inject = ['$httpProvider', 'someAnotherProvider'];
function fooProvider($httpProvider, someAnotherProvider) {
    var provider = this;

    provider.someProperty = 'someValue';
    provider.$get = foo;

    ////////// 

    foo.$inject = ['$http', 'anotherService'];
    function foo($http, anotherService) {
        var service = {};

        service.bar = bar;
        service.foo = 1;

        return service;

        //////////

        function bar () {
            return provider.someProperty;
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы