Uma das dúvidas mais recorrentes entre os iniciantes em AngularJS é a diferença entre Service e Factory e quando exatamente devemos usar um ao invés do outro. Bom, pelo código-fonte você pode ver a resposta:
function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } function service(name, constructor) { return factory(name, ['$injector', function($injector) { return $injector.instantiate(constructor); }]); }
Dado que service simplesmente retorna factory, para o nosso uso diário eles são praticamente iguais. A diferença é o $injector.instantiate que cria uma nova instância de service.
Em resumo, você pode usar qualquer um para resolver o seu problema mas, como regra geral, nós usamos as factories para funções “class-like”, nas quais você pode adicionar propriedades e atributos e retornar para um controller. Por exemplo:
app.factory('Person', function(){ return { name: "Matheus", age: 25, sayHello: function(text){ return "Hello from Concrete!"; } } });
E podemos usar services para compartilhar funções utilitárias. Por exemplo:
app.service('personService', function($http){ this.getPersonInfo = function(personId){ return $http.get("/Person/", { params: {PersonId: personId }); }; });
Entendido? Neste link da documentação oficial do AngularJS tem mais explicações para quem quer entender melhor.
Se tiver alguma dúvida, sugestão ou crítica, é só deixar no campo abaixo. Espero ter ajudado! Até a próxima.