[解決済み] angular.serviceとangular.factoryの比較
質問
私は、両方の
angular.factory()
と
angular.service()
はサービスを宣言するために使用されますが、私は
を見つけることができません。
angular.service
公式ドキュメントのどこにもない。
この2つのメソッドの違いは何ですか?
どちらを使うべきですか(異なることをするとして)?
どのように解決するのですか?
angular.service('myService', myServiceFunction);
angular.factory('myFactory', myFactoryFunction);
このように自分に言い聞かせるまで、この概念を理解するのに苦労しました。
サービス を使用します。 機能 になります。 新しい -ed:
myInjectedService <---- new myServiceFunction()
工場 を使用します。 機能 (コンストラクタ)を書くと 呼び出される :
myInjectedFactory <--- myFactoryFunction()
それをどうするかはあなた次第ですが、便利なパターンがいくつかありますよ...。
を書くなど。 サービス 関数を使用して、公開 API を公開します。
function myServiceFunction() {
this.awesomeApi = function(optional) {
// calculate some stuff
return awesomeListOfValues;
}
}
---------------------------------------------------------------------------------
// Injected in your controller
$scope.awesome = myInjectedService.awesomeApi();
を使ったり 工場 関数を使って公開APIを公開します。
function myFactoryFunction() {
var aPrivateVariable = "yay";
function hello() {
return "hello mars " + aPrivateVariable;
}
// expose a public API
return {
hello: hello
};
}
---------------------------------------------------------------------------------
// Injected in your controller
$scope.hello = myInjectedFactory.hello();
を使ったり 工場 関数を使用してコンストラクタを返します。
function myFactoryFunction() {
return function() {
var a = 2;
this.a2 = function() {
return a*2;
};
};
}
---------------------------------------------------------------------------------
// Injected in your controller
var myShinyNewObject = new myInjectedFactory();
$scope.four = myShinyNewObject.a2();
どれを使えばいいのか...。
どちらも同じことを実現できます。しかし、場合によっては 工場 を使用すると、よりシンプルな構文でインジェクタブルを作成できるため、少し柔軟性が増します。それは、myInjectedServiceは常にオブジェクトでなければならないのに対して、myInjectedFactoryはオブジェクトでも関数参照でも、あるいはどんな値でも構わないからです。例えば、(上記の最後の例のように)コンストラクタを作成するサービスを書いた場合、このようにインスタンスを作成する必要があります。
var myShinyNewObject = new myInjectedService.myFunction()
というのは、間違いなくこれより望ましくない。
var myShinyNewObject = new myInjectedFactory();
(ただし、そもそもこの種のパターンを使うこと自体に注意が必要で、その理由は
新しい
-を使用すると、依存関係を把握しづらくなり、テスト用のモックを作成しづらくなります。を使用するよりも、 サービス側でオブジェクトのコレクションを管理するほうがよいでしょう。
new()
を、気ままに。)
もうひとつ、全部Singletonなんですけど...。
また、どちらのケースでも、angularはシングルトンの管理を手助けしていることを心に留めておいてください。サービスや関数をどこで何回インジェクトしようとも、同じオブジェクトや関数への同じ参照を得ることになります。(ファクトリーが単に数値や文字列のような値を返す場合は例外です。この場合、常に同じ値を得ることができますが、参照は得られません)。
関連
-
angularjs ローカルデータストレージ LocalStorage
-
[解決済み] エラーです。[$injector:unpr] 不明なプロバイダです。ルートプロバイダ
-
[解決済み] AngularJS の $http と $resource
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] ng-modelとng-bindの違いは何ですか?
-
[解決済み] MEAN.jsとMEAN.ioの違いについて
-
[解決済み】AngularJS 。observe メソッドと $watch メソッドの違い
-
[解決済み】AngularJS 。ファクトリーの代わりにサービスを使用する場合
-
[解決済み】ng-appとdata-ng-app、違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular ui-routerで$stateメソッドを$stateChangeStart toStateとfromStateで使用する。
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
angularjs統合ueditor入門
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] 条件に応じて特定のルートにリダイレクトする機能
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング
-
[解決済み] AngularJSのサービスをコンソールからテストするにはどうしたらいいですか?
-
[解決済み】AngularJS 。ファクトリーの代わりにサービスを使用する場合