58

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

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

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

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

任何帮助将不胜感激 :)

4

3 回答 3

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;
}]);
于 2013-03-17T05:14:41.893 回答
21

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

app.service('<service>', ['$http', function($http) {
  this.foo = function() { ... }
}]);
于 2013-11-22T06:45:31.637 回答
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(){
    ...
  }
}
于 2017-05-17T14:16:01.777 回答