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

时间:2013-03-17 05:01:03

标签: javascript dependency-injection angularjs

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

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

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

这可能吗?这甚至有益吗?

非常感谢任何帮助:)

3 个答案:

答案 0 :(得分:102)

是的,你可以使用依赖注入过滤器和指令

例如:

过滤器:

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

答案 1 :(得分:21)

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

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

答案 2 :(得分:7)

虽然现有的答案是正确且有效的,但john papas角度风格指南有利于在Y091中使用$inject服务:

过滤器:

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

指令:

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

厂:

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(){
    ...
  }
}