2013-01-06 17 views
18

Widzę różne przykłady tworzenia kontrolerów i usług w AngularJS i jestem zdezorientowany, czy ktoś może mi wyjaśnić różnice między tymi dwoma podejściami?AngularJS - różne sposoby tworzenia kontrolerów i usług, dlaczego?

app.service('reverseService', function() { 
    this.reverse = function(name) { 
     return name.split("").reverse().join(""); 
    }; 
}); 

app.factory('reverseService', function() { 
    return { 
     reverse : function(name) { 
      return name.split("").reverse().join(""); 
     } 
    } 
}); 

A także przykład kontroler:

function ExampleCtrl($scope) { 
    $scope.data = "some data"; 
} 

app.controller("ExampleCtrl", function($scope) { 
    $scope.data = "some data"; 
} 
+1

Pytanie bardzo podobne do http://stackoverflow.com/q/13362921/1418796 –

+0

Nie mogłem znaleźć odpowiedzi, dlatego podniosłem własne pytanie, biorąc pod uwagę tytuł tego pytania i moje pytanie, wierzę moje pytanie powinno pomóc innym. – Neil

+0

Zobacz także http://stackoverflow.com/questions/13762228/confused-about-service-vs-factory –

Odpowiedz

20

Pierwszy zanieczyszczają global namespace, który nie jest to, co chcesz w dłuższej perspektywie.

function ExampleCtrl($scope){ 
    $scope.data = "some data"; 
} 

Drugi kontroluje kontroler do tej instancji modułu. To sprawia, że ​​jest również injectable. Jeszcze lepiej używa się notacji tablicowej (jak poniżej), ponieważ przetrwa to minifikację.

app.controller("ExampleCtrl", ['$scope', function($scope){ 
    $scope.data = "some data"; 
}]); 

Różnica między usługą (kątową) a fabryką wydaje się niewielka. Usługa zawija fabrykę, która używa $injector.instantiate do zainicjowania usługi.

+2

Zobacz także http://stackoverflow.com/a/13363482/1418796 –

+0

Jak dodać fabryki na parametry? – YajeDev

0

Mój preferowanym sposobem tworzenia kontrolerów i dyrektyw jest następujący:

/** 
* SomeCoolModule.controller.js 
*/ 

(function(){ 
'use strict'; 

    angular.module('app.modals.SomeCoolModule').controller('SomeCoolModuleController', SomeCoolModuleController); 

    AddFlowCurveModalController.$inject = 
     [ 
      '$scope', 
      '$filter', 
      '$log', 
     ]; 

    function SomeCoolModuleController($scope, $filter, $log) { 
     /* controller body goes here */ 
    } 
})(); 

PS: nie globalne zanieczyszczenie nazw odbywa się powyżej powodu Iife.

+0

Robię to samo z usługami również :) –

Powiązane problemy