AngularJS: Service vs Factory
Qual a diferença?
.service() é um método do módulo que recebe um nome e uma função que define o serviço.app.service('myService', function () {
this.sayHello = function () {
console.log('Que lindo dia!');
};
});
.factory() é um método do módulo que recebe um nome e uma função que define a factory.
app.factory('myFactory', function () {
return {
sayHello: function () {
console.log('Lindo dia realmente.');
};
}
});
Então, qual é a diferença?Como se pode verificar, ao invés de se trabalhar com this na factory, é retornado um objecto. Porquê? Porque um serviço é um construtor e a factory não.
Quando usar um e outro?
A escolha mais acertada é optar pela adopção de serviços sempre que possível no que toca à migração para ES6 ECMAScript 6, visto que o serviço é um constructor e a factory não. Optar por um constructor em ES5 ECMAScript 5 permite usar classes ES6 ECMAScript 6 ao migrar para ES6 ECMAScript 6.Pode pegar-se, por exemplo, no código acima e reescrevê-lo desta forma em ES6:
class MyServiceClass {
sayHello() {
console.log('Que lindo dia!');
}
}
app.service('MyService', MyServiceClass);
Na verdade, uma classe ES6 ECMAScript 6 é um construtor em ES5 ECMAScript 5. Com uma factory tal não é possível, uma vez que é invocada como uma função.
Aqui está disponível um bom artigo sobre o uso de ES6 em AngularJS.
Mais informação sobre a versão ES6 ECMAScript 6 do JavaScript em ES6js.com.
fonte: Blogue thoughtram
Licença CC BY-SA 4.0
Silvia Pinhão Lopes, 13.9.15
Sem comentários: