Javascript AngularJS-服务、工厂、过滤器等中的依赖注入

Javascript AngularJS-服务、工厂、过滤器等中的依赖注入,javascript,dependency-injection,angularjs,Javascript,Dependency Injection,Angularjs,因此,我有一些插件和库,我想在我的angular应用程序中使用,并且(目前)我只是引用这些函数/方法,因为它们在99%的应用程序中都是以完全忽略依赖注入的方式使用的 例如,我有一个javascript库“MomentJS”,它处理格式化和验证日期,我在整个应用程序的控制器、服务和过滤器中都使用它。我学习的方法(使用AngularJS)是创建一个引用函数(及其方法)的服务,并将该服务注入到我的控制器中,效果非常好 问题是,我真的需要在所有不同类型的组件中引用这个库,从服务到过滤器,再到控制器,以及

因此,我有一些插件和库,我想在我的angular应用程序中使用,并且(目前)我只是引用这些函数/方法,因为它们在99%的应用程序中都是以完全忽略依赖注入的方式使用的

例如,我有一个javascript库“MomentJS”,它处理格式化和验证日期,我在整个应用程序的控制器、服务和过滤器中都使用它。我学习的方法(使用AngularJS)是创建一个引用函数(及其方法)的服务,并将该服务注入到我的控制器中,效果非常好

问题是,我真的需要在所有不同类型的组件中引用这个库,从服务到过滤器,再到控制器,以及其他一切。所以,我想我的问题是,如何在过滤器、服务和其他非控制器的东西中进行依赖注入

这可能吗?这甚至有益吗


任何帮助都将不胜感激:)

是的,您可以将依赖项注入用于过滤器和指令

例:

过滤器:

app.filter('<filter>', ['$http', function(http){
    return function(data){
    }
}]);
app.filter('<filter', MyFilter);
MyFilter.$inject = ['$http'];
function MyFilter() {
  return function(data) {
  }
}
app.filter(“”,['$http',函数(http){
返回函数(数据){
}
}]);
指令:

app.directive('<directive>', ['$http', function(http){
    return {
        ....
    }
}]);
app.directive('<directive>', MyDirective);
MyDirective.$inject = ['$http'];
function MyDirective() {
  return {
    ...
  }
}
app.directive(“”,['$http',函数(http){
返回{
....
}
}]);
服务:

app.factory('<service>', ['$http', function(http) {
  var shinyNewServiceInstance;
  return shinyNewServiceInstance;
}]);
app.service('<service>', MyService);
MyService.$inject = ['$http'];
function MyService() {
  this.foo = foo;
  function foo(){
    ...
  }
}
app.factory(“”,['$http',函数(http){
var ShinyNewsServiceInstance;
返回ShinyNewsServiceInstance;
}]);

为了完整起见,下面是一个带有注入的服务示例:

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

虽然现有答案正确且有效,但john papas angular style guide支持在以下情况下使用
$inject
服务:

过滤器:

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

app.filter('有没有办法弯曲语法以将依赖项注入提供程序?我需要:可以将deps注入的提供程序,或者可以将工厂/服务注入配置块(?)@Cody服务和工厂都是提供程序。还有
.config()
以与上述示例完全相同的方式处理依赖项注入。@KevinBeal对于
模块
的任何方法都是如此(即
配置、
运行
控制器等),传递一个包含依赖项和处理函数的数组,然后将依赖项注入处理函数。我说得对吗?谢谢!@pilau任何方法需要函数的地方都可以,是的。您甚至可以为指令返回值中的控制器方法执行此操作。(任何有依赖项注入的地方)@KevinBeal我之所以这样问是因为它的底部写着“再次传递dependencies参数将删除模块定义并重新开始”.那么艾伦先生错了吗?目前我似乎无法将控制器注入服务中-至少不是我自己的自定义控制器。我真的不应该在这里,但我看不到一种方法使模态指令工作,它位于控制器外部,促使它弹出。我创建了一个服务,尝试在se上进行双向通信Service可以同时注入两个控制器,但遗憾的是……实现这一点的最佳方式是什么。我想在这里提问,但由于某种原因,它似乎被阻止了,所以我只能对类似的事情发表评论。你真的需要提一个问题,最好是用你的代码。我很想能够写问题-一旦你访问了这个网站,它似乎就是这个网站因为要求太多而被阻止它会永远阻止你。简言之,我认为你不能将控制器注入到事物中(这听起来很愚蠢),所以我创建了服务和getter setter,然后观察需要订阅更新的控制器中的更改。这起到了作用,允许我进行控制器到控制器的通信。