Proszę, znoś mnie tutaj. Wiem, że istnieją inne odpowiedzi, takie jak: AngularJS: usługa kontra dostawca vs fabryka
Jednak nadal nie mogę ustalić, kiedy skorzystasz z usługi nad fabryką.
Z tego, co mogę powiedzieć, fabryka jest powszechnie używana do tworzenia „wspólnych” funkcji, które mogą być wywoływane przez wiele kontrolerów: Tworzenie wspólnych funkcji kontrolera
Dokumenty Angular wydają się preferować fabrykę niż serwis. Odnoszą się nawet do „serwisu”, gdy korzystają z fabryki, co jest jeszcze bardziej mylące! http://docs.angularjs.org/guide/dev_guide.services.creating_services
Kiedy więc skorzystać z usługi?
Czy jest coś, co jest możliwe lub znacznie łatwiejsze do wykonania z serwisem?
Czy dzieje się coś innego za kulisami? Różnice w wydajności / pamięci?
Oto przykład. Poza metodą deklaracji wydają się identyczne i nie mogę zrozumieć, dlaczego miałbym to robić jedno na drugim. http://jsfiddle.net/uEpkE/
Aktualizacja: Z odpowiedzi Thomasa wynika, że usługa służy prostszej logice, a fabryka bardziej złożonej logice metodami prywatnymi, więc zaktualizowałem poniższy kod skrzypiec i wydaje się, że oba są w stanie obsługiwać funkcje prywatne?
myApp.factory('fooFactory', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo; }
return {
setFoobar: function(foo){
addHi(foo);
},
getFoobar:function(){
return fooVar;
}
};
});
myApp.service('fooService', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo;}
this.setFoobar = function(foo){
addHi(foo);
}
this.getFoobar = function(){
return fooVar;
}
});
function MyCtrl($scope, fooService, fooFactory) {
fooFactory.setFoobar("fooFactory");
fooService.setFoobar("fooService");
//foobars = "Hi fooFactory, Hi fooService"
$scope.foobars = [
fooFactory.getFoobar(),
fooService.getFoobar()
];
}