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
Print Friendly and PDF

Sem comentários:

Com tecnologia do Blogger.