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 angular style guide は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 に答える