AngularJS
プロバイダー
サーチ…
構文
- 定数(名前、値)。
- 値(名前、値)。
- 工場(名前、$ getFn);
- サービス(名前、コンストラクタ)。
- プロバイダ(名前、プロバイダ)。
備考
プロバイダは、例えば、他のサービス、コントローラ、および指令に注入できるシングルトンオブジェクトです。すべてのプロバイダは、異なる「レシピ」を使用して登録されていProvider
。 Provider
は、最も柔軟性の高いものです。すべての可能なレシピは:
- 定数
- 値
- 工場
- サービス
- プロバイダ
サービス、ファクトリ、プロバイダはすべて遅延初期化され、コンポーネントはアプリケーションが依存している場合にのみ初期化されます。
デコレータはプロバイダと密接に関連しています。デコレータは、サービスの動作やファクトリの作成を傍受したり、その動作を変更したりするために使用されます。
定数
Constant
は、コンフィギュレーションフェーズと実行フェーズの両方で使用できます。
angular.module('app',[])
.constant('endpoint', 'http://some.rest.endpoint') // define
.config(function(endpoint) {
// do something with endpoint
// available in both config- and run phases
})
.controller('MainCtrl', function(endpoint) { // inject
var vm = this;
vm.endpoint = endpoint; // usage
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{ ::vm.endpoint }}</div>
</body>
エンドポイント= http://some.rest.endpoint
値
Value
は、構成フェーズと実行フェーズの両方で使用できます。
angular.module('app',[])
.value('endpoint', 'http://some.rest.endpoint') // define
.run(function(endpoint) {
// do something with endpoint
// only available in run phase
})
.controller('MainCtrl', function(endpoint) { // inject
var vm = this;
vm.endpoint = endpoint; // usage
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{ ::vm.endpoint }}</div>
</body>
エンドポイント= http://some.rest.endpoint
工場
Factory
は運転段階で利用可能です。
Factoryレシピは、0個以上の引数を持つ関数を使用して新しいサービスを構築します(これらは他のサービスに依存します)。この関数の戻り値は、このレシピによって作成されたサービスインスタンスです。
ファクトリは、プリミティブ、オブジェクトリテラル、関数、またはカスタムタイプのインスタンスであっても、あらゆるタイプのサービスを作成できます。
angular.module('app',[])
.factory('endpointFactory', function() {
return {
get: function() {
return 'http://some.rest.endpoint';
}
};
})
.controller('MainCtrl', function(endpointFactory) {
var vm = this;
vm.endpoint = endpointFactory.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
エンドポイント= http://some.rest.endpoint
サービス
Service
は実行段階で利用可能です。
サービスレシピは、値レシピまたは工場レシピと同じようにサービスを作成しますが、新しいオペレータでコンストラクタを呼び出すことによってサービスレシピが作成されます。コンストラクタは、この型のインスタンスに必要な依存関係を表す0つ以上の引数を取ることができます。
angular.module('app',[])
.service('endpointService', function() {
this.get = function() {
return 'http://some.rest.endpoint';
};
})
.controller('MainCtrl', function(endpointService) {
var vm = this;
vm.endpoint = endpointService.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
エンドポイント= http://some.rest.endpoint
プロバイダ
Provider
は、構成フェーズと実行フェーズの両方で利用できます。
プロバイダレシピは、
$get
メソッドを実装するカスタム型として構文的に定義されています。プロバイダレシピは、アプリケーションを起動する前に行わなければならないアプリケーション全体の設定用にAPIを公開する場合にのみ使用する必要があります。これは通常、アプリケーション間で動作がわずかに異なる必要がある再利用可能なサービスに対してのみ面白いです。
angular.module('app',[])
.provider('endpointProvider', function() {
var uri = 'n/a';
this.set = function(value) {
uri = value;
};
this.$get = function() {
return {
get: function() {
return uri;
}
};
};
})
.config(function(endpointProviderProvider) {
endpointProviderProvider.set('http://some.rest.endpoint');
})
.controller('MainCtrl', function(endpointProvider) {
var vm = this;
vm.endpoint = endpointProvider.get();
});
<body ng-controller="MainCtrl as vm">
<div>endpoint = {{::vm.endpoint }}</div>
</body>
エンドポイント= http://some.rest.endpoint
config
フェーズなしでは結果は
終点= n / a