web-dev-qa-db-ja.com

AngularJS-サービス、工場、フィルターなどへの依存性注入

だから、angular appで使用したいプラグインとライブラリがあり、(現在)99%のアプリで意図されているようにそれらの関数/メソッドを単に参照しています依存性注入を無視します。

(たとえば)日付のフォーマットと検証を処理するjavascriptライブラリ「MomentJS」があり、コントローラー、サービス、フィルターでアプリ全体で使用しています。私が学んだ方法は(AngularJSを使用して)関数(およびそのメソッド)を参照するサービスを作成し、そのサービスをコントローラーに注入することです。

問題は、サービスからフィルター、コントローラー、その他すべてまで、さまざまな種類のコンポーネントでこのライブラリを参照する必要があることです。だから、私の質問は、フィルター、サービス、およびコントローラー以外のすべてで依存関係注入をどのように行うのでしょうか?

これは可能ですか?これはさらに有益ですか?

どんな助けも大歓迎です:)

58
Kevin Beal

はい、フィルターとディレクティブに依存性注入を使用できます

例:

フィルタ:

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;
}]);
102
Arun P Johny

完全を期すために、インジェクションを使用したサービスの例を次に示します。

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

すでに存在する答えは正しく機能していますが、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 {
    ...
  }
}

工場:

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