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


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

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

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

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

любая помощь будет высоко оценили :)

3 58

3 ответа:

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

Ex:

:
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;
}]);

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

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

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

фильтр:

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