AnglarJSのいくつかのProvidersの違いについてまとめました。


https://xebia.com/blog/differ
プロバイダーとは
AnglarJS文書のproviderに対する定義:
プロバイダーは$get()メソッドを持つオブジェクトです。injectorは$getメソッドを呼び出して新しいserviceを作成する例を示します。プロバイダーは他にもいくつかの方法があります。プロバイダーを配置することができます。
AnglarJSは$provideを使って新しいプロバイダーを登録します。プロバイダーは基本的に新しいインスタンスを作成しますが、各プロバイダーは一回だけ作成します。provideは6つの方法でプロバイダーを作成します。簡単なコード例でそれぞれ彼らを説明します。
6つの方法は以下の通りです
  • constant
  • value
  • service
  • factory
  • decorator
  • provider
  • コンサート
    constantはinjectにどこにでも行ける。constantはdecoratorに阻止されないということは、constantの値がいつまでも変わらないということを意味しています。
    
    var app = angular.module('app', []); 
    app.config(function ($provide) {
     $provide.constant('movieTitle', 'The Matrix');
    });
    
    app.controller('ctrl', function (movieTitle) {
     expect(movieTitle).toEqual('The Matrix');
    });
    AnglarJSはより簡便な方法でconstantを作成します。上の3行から5行のコードを書き換えることができます。
    
    app.constant('movieTitle', 'The Matrix');
    Value
    valueは簡単に注入できる値です。string、number、functionでもいいです。
    constantとは違って、valueはconfigrationsに注入されませんが、valueはdecoratorsにブロックされます。
    
    var app = angular.module('app', []); 
    app.config(function ($provide) {
     $provide.value('movieTitle', 'The Matrix')
    });
    
    app.controller('ctrl', function (movieTitle) {
     expect(movieTitle).toEqual('The Matrix');
    })
    valueを作成する簡単な方法:
    
    app.value('movieTitle', 'The Matrix');
    サービス
    serviceは注入できる構造関数である。あなたが望むなら、関数で必要な依存性を指定できます。
    serviceは一例で、一回だけ作成されます。servicesは、データを共有するなど、コントローラ間でデータを転送する良い方法です。
    
    var app = angular.module('app' ,\[\]); 
    app.config(function ($provide) {
     $provide.service('movie', function () {
      this.title = 'The Matrix';
     });
    });
    
    app.controller('ctrl', function (movie) {
     expect(movie.title).toEqual('The Matrix');
    });
    サービスの簡単な作成方法:
    
    app.service('movie', function () {
     this.title = 'The Matrix';
    });
    Factory
    factoryは注入可能な関数です。
    serviceと同じ点:factoryも一例です。この関数で依存を指定することもできます。
    factoryは普通の関数を注入します。AngullarJsはこの関数を呼び出します。serviceはコンストラクションを注入します。
    serviceは、newを呼び出して新しいオブジェクトを作成するコンストラクタです。factoryを使って、この関数を返してほしいものを返してもいいです。
    factoryは$get方法しかないプロヴィダーです。
    
    var app = angular.module('app', []); 
    app.config(function ($provide) {
     $provide.factory('movie', function () {
      return {
       title: 'The Matrix';
      }
     });
    });
    
    app.controller('ctrl', function (movie) {
     expect(movie.title).toEqual('The Matrix');
    });
    factoryを作成する簡単な方法:
    
    app.factory('movie', function () {
     return {
      title: 'The Matrix';
     }
    });
    Decorator
    decoratorは他のprovidersを修正またはパッケージすることができますが、constantは装飾されません。
    
    var app = angular.module('app', []); 
    app.value('movieTitle', 'The Matrix'); 
    app.config(function ($provide) {
     $provide.decorator('movieTitle', function ($delegate) {
      return $delegate + ' - starring Keanu Reeves';
     });
    });
    
    app.controller('myController', function (movieTitle) {
     expect(movieTitle).toEqual('The Matrix - starring Keanu Reeves');
    });
    プロバイダー
    providerはすべてのプロバイダーの中で最も複雑で、複雑なcreation関数と配置オプションがあります。
    providerは実際に配置可能なfactoryです。プロバイダーはオブジェクトまたは構造関数を受け入れます。
    
    var app = angular.module('app', []); 
    app.provider('movie', function () {
     var version;
     return {
      setVersion: function (value) {
       version = value;
      },
      $get: function () {
       return {
        title: 'The Matrix' + ' ' + version
       }
      }
     }
    });
    
    app.config(function (movieProvider) {
     movieProvider.setVersion('Reloaded');
    });
    
    app.controller('ctrl', function (movie) {
     expect(movie.title).toEqual('The Matrix Reloaded');
    });
    締め括りをつける
    すべてのプロバイダーは一度だけ実装されますので、彼らは一例です。
    constantを除いて、他のプロバイダーは全部decorcatedになります。
    constantは値です。どこにでも注入できます。その値は変えられません。
    valueは簡単な注入可能な値です。
    serviceは注入可能な構造関数である。
    factoryは注入可能な関数です。
    decoratorはconstantを除いて、他のprovidersを修正またはパッケージすることができます。
    providerは配置可能なfactoryです。
    ここで、AnglarJSのいくつかのProvidersの違いについてまとめた文章を紹介します。AnglarJSのProvidersの違いについては、以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。