2013-01-06 18 views
18

मैं AngularJS में नियंत्रकों और सेवाओं को बनाने के विभिन्न उदाहरण देख रहा हूं और मैं उलझन में हूं, क्या कोई मुझे दो दृष्टिकोणों के बीच अंतर बता सकता है?कोणीयजेएस - नियंत्रकों और सेवाओं को बनाने के विभिन्न तरीके, क्यों?

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(""); 
     } 
    } 
}); 

और यह भी एक नियंत्रक उदाहरण:

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

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

http://stackoverflow.com/q/13362921/1418796 –

+0

पर एक प्रश्न बहुत ही समान नहीं था, इसलिए मुझे जवाब नहीं मिला, इसलिए मैंने अपना प्रश्न उठाया, उस प्रश्न का शीर्षक और मेरा प्रश्न, मुझे विश्वास है मेरा प्रश्न दूसरों की सहायता करने के लिए खड़ा होना चाहिए। – Neil

+0

यह भी देखें http://stackoverflow.com/questions/13762228/confused-about-service-vs-factory –

उत्तर

20

पहले एक global namespace अपवित्र होगा, जो नहीं है क्या आप लंबे समय में चाहते हैं।

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

दूसरा वाला उस मॉड्यूल इंस्टेंस में नियंत्रक को स्कॉप्स करता है। यह इसे injectable बनाता है। बेहतर अभी भी सरणी नोटेशन (नीचे के रूप में) का उपयोग कर रहा है, क्योंकि यह खनन से बच जाएगा।

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

एक (कोणीय) सेवा और कारखाने के बीच का अंतर काफी छोटा लगता है। एक सेवा एक कारखाने को लपेटती है, जो सेवा शुरू करने के लिए $injector.instantiate का उपयोग करती है।

+2

यह भी देखें http://stackoverflow.com/a/13363482/1418796 –

+0

पैरामीटर पर फैक्ट्री कैसे जोड़ सकते हैं? – YajeDev

0

मेरे नियंत्रकों और निर्देशों बनाने का पसंदीदा तरीका निम्न प्रकार है:

/** 
* 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 */ 
    } 
})(); 

पुनश्च: कोई वैश्विक नामस्थान प्रदूषण Iife की वजह से ऊपर हो रहा है।

+0

मैं सेवाओं के साथ भी ऐसा ही करता हूं :) –

संबंधित मुद्दे