2012-07-04 16 views
37

मैं कुछ प्रकार के यूटिल बंडल कैसे बना सकता हूं जो मेरे सभी नियंत्रकों से सुलभ होगा?सामान्य नियंत्रक फ़ंक्शन बनाना

'use strict'; 

angular.module('lpConnect', []). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/home', {template: 'views/home.html', controller: HomeCtrl}). 
     when('/admin', {template: 'views/admin.html', controller: AdminCtrl}). 
     when('/connect', {template: 'views/fb_connect.html', controller: MainAppCtrl}). 
     otherwise({redirectTo: '/connect'}); 
}]); 

मैं एक समारोह है कि HomeCtrl, AdminCtrl और MainAppCtrl के लिए आम हो सकता हैं:

मैं अपने मुख्य मॉड्यूल में इस मार्ग कोड है।

मुझे AngularJS में इसे कैसे करना चाहिए?

उत्तर

61

कोणीय में सामान्य कोड को परिभाषित करने का तरीका सेवाओं के माध्यम से है।

तुम इतनी तरह एक नई सेवा निर्धारित करना होगा:

.factory('CommonCode', function ($window) { 
     var root = {}; 
     root.show = function(msg){ 
      $window.alert(msg); 
     }; 
     return root; 
    }); 

अपने नियंत्रक में आप इस service..like डालेगी तो

function MainAppCtrl($scope,CommonCode) 
{ 
    $scope.alerter = CommonCode; 
    $scope.alerter.show("Hello World"); 
} 

बस अपने नियंत्रक कार्य करने के लिए एक तर्क के रूप CommonCode शामिल हैं। कोणीय आपके लिए इंजेक्शन करने का ख्याल रखेगा (निर्भरता इंजेक्शन पर पढ़ें .. यह समझने के लिए कि यहां क्या हो रहा है।)

+6

किसी को भी किसी और इसे खोजें .... अजीब बात है कि आप कारखाने की विधि को बुलाकर एक सेवा परिभाषित करते हैं? ऐसा लगता है कि कुछ नामकरण सुधार ढांचे की पहुंच क्षमता बढ़ाने के लिए एक लंबा रास्ता तय करेंगे। – bclinkinbeard

+0

@bclinkinbeard बिल्कुल मेरे विचारों के रूप में मैं AngularJS के आसपास अपने सिर लपेट रहा हूँ। 'कारखाना() ',' मान() ',' निरंतर() ', और' सेवा() '' प्रदान() 'के विशिष्ट मामलों के लिए शॉर्टकट से अधिक नहीं प्रतीत होता है, जिसका उद्देश्य परिभाषित करने के लिए उपयोग किया जाना है (सेवाएं उपलब्ध कराना। मुझे लगता है कि दस्तावेज़ों को एक पुल अनुरोध से फायदा होगा जो उपरोक्त वाक्य को कहीं बड़े अक्षरों में रखता है। – Tony

+0

फ्रैंक होने के लिए, जब मैंने पहली बार यह शुरू किया तो मुझे उलझन में डाल दिया। कारखाना() आमतौर पर उपरोक्त उदाहरण से, एक सिंगलटन लौटाता है, जैसा कि आप देख सकते हैं। एक सेवा() - एक कन्स्ट्रक्टर देता है। एक मान() और निरंतर() जहां तक ​​मैं कह सकता हूं आम तौर पर वही काम करता है। और ये सभी प्रदान करने के लिए रैपर (सुविधा) हैं() ... – ganaraj

7

बस पिछले उत्तर को अपडेट करने के लिए (जो केवल परिभाषित क्या factory है), वहाँ inject dependencies के 3 तरीके (सामान्य कोड को परिभाषित) AngularJS में हैं:

  • प्रदाता
  • कारखानों
  • सेवाएं

मैं बहुत प्रदाता के बारे में बात नहीं करेंगे क्योंकि यह निर्भरता इंजेक्शन के लिए एक और अधिक श्रमिक विधि है। हालांकि, this page बहुत अच्छी तरह से बताता है कि वे कैसे काम करते हैं।


तकनीकी तौर पर, सेवा और कारखाने एक ही बात के लिए उपयोग किया जाता है। यह पता चला है कि एक सेवा एक कन्स्ट्रक्टर फ़ंक्शन है जबकि एक कारखाना नहीं है।

this post से:

module.service('serviceName', function); 

जब एक इंजेक्शन तर्क आप समारोह का एक उदाहरण के साथ प्रदान की हो जाएगा के रूप में serviceName की घोषणा।

module.factory('factoryName', function); 

जब एक इंजेक्शन तर्क आप साथ मान जो फ़ंक्शन संदर्भ module.factory के लिए पारित लागू द्वारा दिया जाता है प्रदान किया जाएगा के रूप में factoryName की घोषणा।


आप एक आप पसंद करते हैं का उपयोग करें और ही परिणाम प्राप्त कर सकते हैं।

यहाँ तो factoryservice पहले के माध्यम से वास्तव में ही बात कर रहे दो कोड, और है:

सेवा वाक्य रचना

app.service('MyService', function() { 
    this.sayHello = function() { 
    console.log('hello'); 
    }; 
}); 

फैक्टरी वाक्य रचना

app.factory('MyService', function() { 
    return { 
    sayHello: function() { 
     console.log('hello'); 
    } 
    } 
}); 
संबंधित मुद्दे