यदि एकमात्र कारण आपको इन "कक्षाओं" को कोणीय सेवाओं के लिए आवश्यक है, तो उनकी निर्भरता दर्द रहित रूप से इंजेक्शन की जानी चाहिए, आप $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 ($ लॉग) पर भेजा जा सके इस मामले में)।
मैंने देखा कि यह एक साल का सवाल है, लेकिन मुझे यह उपरोक्त प्राप्त करने के लिए एक रास्ता तलाशने के दौरान मिला और आखिरकार इस दृष्टिकोण का उपयोग करके हल किया गया।
इसका उद्देश्य क्या है? आप उन मॉड्यूल में इंजेक्ट नहीं कर सकते जिन्हें आप इन्हें उपयोग नहीं करना चाहते हैं। – ribsies
नहीं, और मैंने एंगुलर-यूआई लाइब्रेरी के साथ उपयोग किए गए किसी भी विशिष्ट सम्मेलन को नहीं देखा है, उदाहरण के लिए –
[संभावित फैक्ट्री कैसे बनाएं angularjs में?] (http://stackoverflow.com/questions/24284756/how-to-create-private-factory-in-angularjs) –