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

AngularJS - инъекция зависимостей в сервисах, фабриках, фильтрах и т.д.

Итак, у меня есть некоторые плагины и библиотеки, которые я хочу использовать в моем приложении angular и (в настоящее время). Я просто ссылаюсь на эти функции/методы, поскольку они были предназначены в 99% приложений таким образом, чтобы полностью игнорировать инъекцию зависимостей.

У меня есть (например) библиотека javascript "MomentJS", которая занимается форматированием и проверкой дат, и у меня есть для нее использование во всем моем приложении в контроллерах, службах и фильтрах. Способ, которым я научился (используя AngularJS), - создать службу, которая ссылается на функцию (и ее методы) и внедрить эту службу в мои контроллеры, которая отлично работает.

Проблема в том, что мне действительно нужно ссылаться на эту библиотеку во всех различных компонентах от служб до фильтров для контроллеров и всего остального. Итак, я думаю, мой вопрос в том, как вы делаете инъекцию зависимостей в фильтрах, службах и всего остального, что не является контроллером?

Возможно ли это? Это даже полезно?

Любая помощь будет принята с благодарностью:)

4b9b3361

Ответ 1

Да, вы можете использовать инъекцию зависимостей для фильтров и директив

Пример:

Фильтр:

app.filter('<filter>', ['$http', function(http){
    return function(data){
    }
}]);

Директива

app.directive('<directive>', ['$http', function(http){
    return {
        ....
    }
}]);

Услуги:

app.factory('<service>', ['$http', function(http) {
  var shinyNewServiceInstance;
  return shinyNewServiceInstance;
}]);

Ответ 2

Для полноты, вот пример обслуживания с инъекцией:

app.service('<service>', ['$http', function($http) {
  this.foo = function() { ... }
}]);

Ответ 3

Хотя уже существующие ответы верны и работают, руководство по стилю john papas angular способствует использованию службы $inject в Y091:

Фильтр:

app.filter('<filter', MyFilter);
MyFilter.$inject = ['$http'];
function MyFilter() {
  return function(data) {
  }
}

Директива

app.directive('<directive>', MyDirective);
MyDirective.$inject = ['$http'];
function MyDirective() {
  return {
    ...
  }
}

Factory:

app.factory('<factory>', MyFactory);
MyFactory.$inject = ['$http'];
function MyFactory() {
  var shinyNewServiceInstance;
  return shinyNewServiceInstance;
}

Услуги:

app.service('<service>', MyService);
MyService.$inject = ['$http'];
function MyService() {
  this.foo = foo;
  function foo(){
    ...
  }
}