Por favor tengan paciencia conmigo aquí. Sé que hay otras respuestas como: AngularJS: Servicio vs proveedor vs fábrica
Sin embargo, todavía no puedo entender cuándo usarías el servicio en la fábrica.
Por lo que puedo decir, la fábrica se usa comúnmente para crear funciones "comunes" que pueden ser llamadas por múltiples Controladores: Crear funciones comunes de controlador
Los documentos angulares parecen preferir la fábrica al servicio. ¡Incluso se refieren al "servicio" cuando usan la fábrica, lo cual es aún más confuso! http://docs.angularjs.org/guide/dev_guide.services.creating_services
Entonces, ¿cuándo se usaría el servicio?
¿Hay algo que solo sea posible o mucho más fácil con el servicio?
¿Hay algo diferente que ocurra detrás de escena? Diferencias de rendimiento / memoria?
Aquí hay un ejemplo. Aparte del método de declaración, parecen idénticos y no puedo entender por qué haría uno frente al otro. http://jsfiddle.net/uEpkE/
Actualización: Según la respuesta de Thomas, parece implicar que el servicio es para una lógica más simple y de fábrica para una lógica más compleja con métodos privados, por lo que actualicé el código de violín a continuación y parece que ambos son capaces de admitir funciones privadas.
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()
];
}