2015-02-23 12 views
6

मेरे पास एक कोणीय मॉड्यूल है जिसमें कुछ 'निजी' सेवाएं शामिल हैं। उन निजी सेवाओं को केवल उसी मॉड्यूल में अन्य सेवाओं द्वारा आवश्यक है और परीक्षण के लिए उन्हें बेनकाब करना समझ में आता है। लेकिन मैं नहीं चाहता कि अन्य मॉड्यूल इस सेवाओं का उपयोग करें।निजी कोणीय सेवा या नियंत्रक

क्या ऐसी सेवाओं को 'निजी' चिह्नित करने की कोई संभावना है? क्या इस सेवा को नाम देने के लिए कम से कम एक सम्मेलन है ताकि अन्य उन्हें निजी मान सकें?

+0

इसका उद्देश्य क्या है? आप उन मॉड्यूल में इंजेक्ट नहीं कर सकते जिन्हें आप इन्हें उपयोग नहीं करना चाहते हैं। – ribsies

+0

नहीं, और मैंने एंगुलर-यूआई लाइब्रेरी के साथ उपयोग किए गए किसी भी विशिष्ट सम्मेलन को नहीं देखा है, उदाहरण के लिए –

+0

[संभावित फैक्ट्री कैसे बनाएं angularjs में?] (http://stackoverflow.com/questions/24284756/how-to-create-private-factory-in-angularjs) –

उत्तर

1

यदि एकमात्र कारण आपको इन "कक्षाओं" को कोणीय सेवाओं के लिए आवश्यक है, तो उनकी निर्भरता दर्द रहित रूप से इंजेक्शन की जानी चाहिए, आप $injector.instantiate का उपयोग सेवाओं के रूप में पंजीकृत किए बिना उन्हें तुरंत चालू करने के लिए कर सकते हैं।

नमूना कोड:

var PrivateClass = (function() { 
    function PrivateClass($log) { 
     this.hello = function() { $log.debug("Hello World!");} 
    } 
    PrivateClass.$inject = ["$log"]; 
    return PrivateClass; 
})(); 

angular.module('TestApp', []).run(['$injector', function ($injector) { 
    var p = $injector.instantiate(PrivateClass); 
    p.hello(); 
}]); 

आप निर्माता में $injector.instantiate(PrivateClass) का प्रयोग करेंगे (या कहीं भी) सेवाओं की जरूरत है कि भीतर, PrivateClass का एक उदाहरण बनाने के लिए। यदि आपको सिंगलटन (वास्तविक कोणीय सेवा की तरह) व्यवहार करने के लिए निजी क्लास की आवश्यकता है, तो आप एक एक्सेसर क्लास का उपयोग कर सकते हैं जो इसे एक बार तुरंत चालू करे और कॉलर्स के संदर्भ में लौटाए।

इसका लाभ यह है कि आपको तत्काल सेवा को प्रदूषित करने की आवश्यकता नहीं है (इस मामले में फ़ंक्शन angular.run को पास किया गया है), केवल निर्भरता वाले निर्भरता सरणी की आवश्यकता होती है ताकि उन्हें PrivateClass ($ लॉग) पर भेजा जा सके इस मामले में)।

मैंने देखा कि यह एक साल का सवाल है, लेकिन मुझे यह उपरोक्त प्राप्त करने के लिए एक रास्ता तलाशने के दौरान मिला और आखिरकार इस दृष्टिकोण का उपयोग करके हल किया गया।

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