Dei uma pesquisada, porém não entendi muito bem. Qual a principal diferença entre uma service e uma factory? É algo apenas na instaciação né?
Dei uma pesquisada, porém não entendi muito bem. Qual a principal diferença entre uma service e uma factory? É algo apenas na instaciação né?
Sim.
No factory tu instancia e retorna o objeto para o cliente, podendo então fazer algum processamento antes da construção desse objeto. Já no Service o angular é quem instancia o objeto para você, então não há esse espaço para fazer qualquer processamento antes da instanciação.
Completando. Factory retorna sempre um objeto e service uma função.
Eu entendo Alex, mas ambos os métodos para mim parecem a mesma coisa, o uso não mudou em nenhuma vez;
Na factory a mesma instância é injetada nos serviços. Com service você pode retornar uma função para criar instâncias diferentes. A equipe do Angular pede para dar ênfase no Factory quando lemos sua documentação.
Obrigado Flávio, vou treinar mais esse conceito, já tenho uma certa experiência com Angular 1.x.x porém esse conceito não entra na cabeça.
Imagine que você tenha uma aplicação que possui o modo offline, que quando está ativo ao invés de utilizar o $http acessa os dados de um value configurado em sua aplicação. Você poderia dividir seus serviços em dois tipos: offline e online, então digamos que você tenha um service chamado ProjectsOnline que usa o $http e um service ProjectsOffline que utiliza os valores locais na sua aplicação. Com isso em mente você poderia criar uma factory chamada Projects que decidiria qual dos serviços utilizar dependendo do contexto da aplicação (online ou offline) que ficaria mais ou menos assim:
angular.module('myApp', [])
.constant('OFFLINE_MODE', <%= isOfflineMode %>)
.value('data', <%= data %>)
.service('ProjectsOnline', ...
.service('ProjectsOffline', ...
.factory('Projects', ['OFFLINE_MODE', 'ProjectsOnline', 'ProjectsOffline',
function(OFFLINE_MODE, ProjectsOnline, ProjectsOffline) {
return OFFLINE_MODE ? ProjectsOffline : ProjectsOnline;
}
])
;
Assim seus controladores só precisam conhecer o Projects. Você não teria como fazer o mesmo com um service porque você não tem controle sobre a instanciação.
Muito bom esse exemplo Alex, ficou bem explicativo! Parabéns e obrigado.