AngularJS : What is a factory? AngularJS : What is a factory? angularjs angularjs

AngularJS : What is a factory?


From what I understand they are all pretty much the same. The major differences are their complexities. Providers are configurable at runtime, factories are a little more robust, and services are the simplest form.

Check out this question AngularJS: Service vs provider vs factory

Also this gist may be helpful in understanding the subtle differences.

Source: https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc

jsFiddle: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

author: Pawel Kozlowski

var myApp = angular.module('myApp', []);//service style, probably the simplest onemyApp.service('helloWorldFromService', function() {    this.sayHello = function() {        return "Hello, World!";    };});//factory style, more involved but more sophisticatedmyApp.factory('helloWorldFromFactory', function() {    return {        sayHello: function() {            return "Hello, World!";        }    };});//provider style, full blown, configurable version     myApp.provider('helloWorld', function() {    // In the provider function, you cannot inject any    // service or factory. This can only be done at the    // "$get" method.    this.name = 'Default';    this.$get = function() {        var name = this.name;        return {            sayHello: function() {                return "Hello, " + name + "!";            }        };    };    this.setName = function(name) {        this.name = name;    };});//hey, we can configure a provider!            myApp.config(function(helloWorldProvider){    helloWorldProvider.setName('World');});function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {    $scope.hellos = [        helloWorld.sayHello(),        helloWorldFromFactory.sayHello(),        helloWorldFromService.sayHello()];}​


One major difference I see is that you can run custom code in the factory. But, in a service, only object creation happens.

myJs.factory('Factory', function() {    //Write custom code here    return {            Hello: function() {            return "Hello, World!"        }    };});


My two cents on this topic. I am a very very newbie and just into understanding Angular JS and this was one of the things that confused me a lot and hence I studied it in somewhat detail. I have been making notes for giving interviews and this may be useful to others.

  • service and factory do the same things in different ways
  • both are injectibles
  • for most things use factory syntax
  • easier to understand
  • nowadays with es6 "service" is done since it converts to es6 classes better
  • its essentially abstracting away business logic from the controller
  • if you use biz logic with controllers then you can only use with controllers
  • controller is for putting data on scope not processing lengthy biz logic
  • so what happens in above scenario is that complex biz logic is tied up into controllers. Not for processing data. So put bits and pieces of it into services or factory. So your code is lean and modular.
  • services are singletons