AngularJS - инъекция зависимостей в сервисах, фабриках, фильтрах и т.д.
Итак, у меня есть некоторые плагины и библиотеки, которые я хочу использовать в моем приложении angular и (в настоящее время). Я просто ссылаюсь на эти функции/методы, поскольку они были предназначены в 99% приложений таким образом, чтобы полностью игнорировать инъекцию зависимостей.
У меня есть (например) библиотека javascript "MomentJS", которая занимается форматированием и проверкой дат, и у меня есть для нее использование во всем моем приложении в контроллерах, службах и фильтрах. Способ, которым я научился (используя AngularJS), - создать службу, которая ссылается на функцию (и ее методы) и внедрить эту службу в мои контроллеры, которая отлично работает.
Проблема в том, что мне действительно нужно ссылаться на эту библиотеку во всех различных компонентах от служб до фильтров для контроллеров и всего остального. Итак, я думаю, мой вопрос в том, как вы делаете инъекцию зависимостей в фильтрах, службах и всего остального, что не является контроллером?
Возможно ли это? Это даже полезно?
Любая помощь будет принята с благодарностью:)
Ответы
Ответ 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(){
...
}
}