何がベストプラクティスで、何を使用すべきかわかりません。
以下の2つの方法の違いは何ですか?
module.service(..);
と
module.factory(..);
何がベストプラクティスで、何を使用すべきかわかりません。
以下の2つの方法の違いは何ですか?
module.service(..);
と
module.factory(..);
これについては、Pawel Kozlowski による素晴らしい Google グループの投稿があります。
https://groups.google.com/forum/#!msg/angular/hVrkvaHGOfc/idEaEctreMYJ
パウエルから引用:
実際、$provide.provider、$provide.factory、および $provide.service は、それらすべてがオブジェクト インスタンスを作成するための青写真/指示であるという意味で、多かれ少なかれ同じものです (これらのインスタンスは、コラボレーターに注入する準備ができています)。 .
$provide.provider は、ブループリントを登録する最も洗練された方法であり、複雑な作成機能と構成オプションを持つことができます。
$provide.factory は、構成オプションをサポートする必要はないが、より洗練された作成ロジックが必要な場合の $provide.provider の簡易バージョンです。
$provide.service は、作成ロジック全体がコンストラクター関数の呼び出しに要約される場合に使用します。
したがって、構築ロジックの複雑さに応じて、$provide.provider、$provide.factory、および $provide.service のいずれかを選択しますが、最終的に得られるのは新しいインスタンスです。
これは、(スレッドからの)実証する付属のフィドルです: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/
そしてコード:
var myApp = angular.module('myApp', []);
//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
this.sayHello = function() {
return "Hello, World!"
};
});
//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!"
}
};
});
//provider style, full blown, configurable version
myApp.provider('helloWorld', function() {
this.name = 'Default';
this.$get = function() {
var name = this.name;
return {
sayHello: function() {
return "Hello, " + name + "!"
}
}
};
this.setName = function(name) {
this.name = name;
};
});
//hey, we can configure a provider!
myApp.config(function(helloWorldProvider){
helloWorldProvider.setName('World');
});
function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {
$scope.hellos = [
helloWorld.sayHello(),
helloWorldFromFactory.sayHello(),
helloWorldFromService.sayHello()];
}