16

मैं इस तरह एक कार्यक्रम संरचना प्राप्त करने के लिए कोशिश कर रहा हूँ:AngularJS में एक सेवा "उत्सुक भार" कैसे करें? (इसके लिए आवश्यक इससे पहले कि यह दृष्टांत, स्वचालित रूप से)

enter image description here

समस्या यहाँ है, जब वहाँ शुरुआत में विशेषताओं का प्रयोग कोई स्पष्ट नियंत्रक है, वे तत्काल नहीं हैं और FeatureRegistry में पंजीकृत नहीं हैं, इसलिए वे दृश्य में दिखाई नहीं दे सकते हैं। लेकिन मैं जो हासिल करना चाहता हूं वह यह है कि वे दृश्य में दिखाई देते हैं, फिर वहां टेम्पलेट ng-include के माध्यम से लोड किया जाता है और फिर टेम्पलेट में प्रत्येक feauture के लिए विशिष्ट नियंत्रक होते हैं। ये नियंत्रक वे हैं जो सुविधाओं का उपयोग कर रहे हैं।

विशेषताएं मूल रूप से केवल टेम्पलेट्स और आइकनों के स्थान के बारे में बताने के लिए हैं, जिनका उपयोग करना है, और फ़ीचर की शुरुआत को बंद करना भी है।

लेकिन मेरे शुरुआती प्रश्न पर वापस:
इस समय की आवश्यकता नहीं होने पर भी सेवाओं को तत्काल कैसे करें?

या कोई अन्य कार्य है, जिसका उपयोग मैं सेवा के बजाय इसके लिए कर सकता हूं? मुझे यह भी पसंद आएगा कि आप मुझे उस पर इंगित करें :)

उत्तर

21

आप इसे अपने आवेदन के run भाग में पूछ सकते हैं, इंजेक्टर इसे आमंत्रित करेगा।

angular.module("myApp", []). 
    factory("EagerService", function() { 
     console.log("I'm ready."); 
    }). 
    run(function (EagerService) { 
     console.log("EagerService is ready."); 
    }); 

फिर भी, जहाँ तक मैं समझता हूँ, आप बच्चे/उप नियंत्रक है कि इस EagerService की जरूरत है। आप इसे इंजेक्ट क्यों नहीं करते?

+0

उन्हें 'फ़ीचर व्यू कंट्रोलर' द्वारा पहले शामिल किया जाना है .. उन्हें नियंत्रकों के साथ दृश्य में टेम्पलेट्स शामिल करना होगा – JustGoscha

+0

धन्यवाद बीटीडब्ल्यू, अब के लिए बहुत अच्छा काम किया है! :) – JustGoscha

+0

यदि आप वेबपैक का उपयोग करते हैं, तो आपको कम से कम एक कोड लाइन चलाने की आवश्यकता है, क्योंकि यदि कोई कोड नहीं है तो वेबपैक मज़े में प्रवेश नहीं करता है। तो, मेरे मामले में, मैं 'console.log' के बजाय 'वापसी' का उपयोग करता हूं – bora89

5

(चूंकि यह अपेक्षाकृत पुराना है - यह उत्तर भविष्य के पाठकों के लिए है - लेकिन मैं इस प्रश्न में ठोकर खा रहा हूं, इसलिए शायद कोई और भी होगा) यदि आप प्रदाताओं/कॉन्फ़िगर ब्लॉक का उपयोग करते हैं - तो वे उत्सुकता से काम करते हैं, इसलिए उत्सुकता करना बेहतर होता है वहां प्रारंभिक कोड। आप शायद सेवाओं/रन ब्लॉक के मामले में सोच रहे थे।

angular.module('myServiceModule', []).service('myService', function() { 
    alert("service"); 

    // service 
    return {}; 
}); 

हालांकि इस चेतावनी भी कोई नहीं करता है, तो पॉप जाएगा:

कोड के साथ प्रदर्शित करने के लिए, इस चेतावनी पॉप नहीं होगा (यह मानते हुए myServiceModule एक मॉड्यूल है कि आपके आवेदन पर निर्भर करता है और myService कहीं भी इंजेक्शन नहीं है) myProvider सेवा पर निर्भर करता है:

angular.module('myProviderModule', []).provider('myProvider', function() { 
    alert("provider"); 

    // Define your service here. Can be an array of inject-ables 
    // instead of a function. 
    this.$get = function() { 
     // service 
     return {}; 
    }; 
}); 

आप इस plunker में कार्रवाई में देख सकते हैं।

आधिकारिक दस्तावेज here में प्रदाताओं के बारे में और पढ़ें।

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