2015-06-01 7 views
6

मेरे पास 3 मॉड्यूल मेरे में AngularJS ऐप, उदा। main, home और productmain मॉड्यूल home और निर्भरता (ng.module('main', ['home', 'product'])), जबकि home और product मॉड्यूल किसी भी निर्भरता (ng.module('product', [])ng.module('phome', [])) होने नहीं कर रहे हैं, अभी भी product मॉड्यूल home मॉड्यूल सेवा का उपयोग कर सकते के रूप में product मॉड्यूल आ रही हैं? क्यूं कर???तीसरे मॉड्यूल पर निर्भर होने पर जोड़े जाने पर 2 अलग-अलग मॉड्यूल एक दूसरे तक क्यों पहुंच सकते हैं?

नीचे मेरे आवेदन का नमूना कोड है, जिसमें एक ही परिदृश्य और एक ही समस्या है। और यह JSfiddle Link है।

<!DOCTYPE html> 
<html ng-app="main"> 
<body ng-controller="MainController as mainController"> 
{{mainController.name}} 
<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
<script> 
(function (ng) { 
    var homeModule = ng.module('home', []); 
    homeModule.service("HomeService", [function() { 
     var homeService = this; 
     homeService.getName = function() { 
      return "Home Service"; 
     } 
    }]); 
    var productModule = ng.module('product', []); 
    productModule.service("ProductService", ["HomeService", function (HomeService) { 
     var productService = this; 
     productService.getName = function() { 
      return "Product Service - " + HomeService.getName(); 
     }; 
    }]); 
    var mainModule = ng.module('main', ['home', 'product']); 
    mainModule.controller("MainController", ['ProductService', function (ProductService) { 
     var mainController = this; 
     mainController.name = ProductService.getName(); 
    }]); 
})(angular); 
</script> 
</body> 
</html> 
+1

इसका कारण यह है घर सेवा एक वैश्विक चर जो अनुप्रयोग के भीतर कहीं से भी एक्सेस किया जा सकता है के रूप में परिभाषित हो जाता है। अधिक जानकारी के लिए http://tutorials.jenkov.com/angularjs/dependency-injection.html पढ़ने का प्रयास करें। – vipulsharma

उत्तर

3

जवाब बहुत सरल है। कोणीय मॉड्यूल के लिए मॉड्यूल की सामग्री को दायरा नहीं देता है। मैंने कहीं पढ़ा है कि इस कार्यक्षमता को जोड़ने की चर्चा हुई है, लेकिन मैंने इसे अभी तक लागू नहीं किया है।

मामलों को और भी खराब बनाने के लिए, एक आयातित मॉड्यूल पर लागू नियंत्रक आपके ऐप के भीतर अद्वितीय होंगे। एक उदाहरण के रूप में, मैं एक बार कोणीय-UI बूटस्ट्रैप का उपयोग कर रहा था और मेरी टीम के किसी ने AlertController जोड़ा। जब हम नियंत्रक कभी नहीं मारा गया था, तो हम बहुत उलझन में थे, लेकिन ऐसा इसलिए था क्योंकि कोणीय-यूई पहले ही नियंत्रक को परिभाषित कर चुका था।

तो यह केवल दृश्यता का सवाल नहीं है, बल्कि रखरखाव और नामकरण का भी सवाल है।

मॉड्यूल पर परिभाषित सब कुछ सार्वजनिक है।

+0

यह इतना भयानक है। कोणीय के 1.5 साल बाद भाग्यशाली, मैंने अभी तक इस मुद्दे में भाग नहीं लिया है। – mmmeff

+0

मुझे तीसरे पक्ष के पुस्तकालयों से 'नाम नियंत्रक' के साथ संघर्ष से बचने के लिए, इस मुद्दे से आने वाले 'NameCtrl' मानक को याद करना प्रतीत होता है। जब तक हमने 'NameCtrl' सम्मेलन का पालन नहीं किया, तब तक यह वास्तव में मेरी टीम को तीन या चार बार मारा गया है। –

0

यह काम करता है क्योंकि home मॉड्यूल की निर्भरता main मॉड्यूल में जोड़ा जाता है और main के रूप में केवल बुला रहा है product service इसलिए यह केवल product मॉड्यूल पर निर्भर होना चाहिए।

यदि आप home मॉड्यूल निर्भरता फॉर्म main मॉड्यूल (जो मामला होना चाहिए) को हटा देता है तो यह काम करना बंद कर देता है।

टीएलडीआर; homeproduct मॉड्यूल पर निर्भरता जोड़ने की नीचे की ओर यह नहीं है कि यह केवल उत्पाद निर्भरता जोड़कर काम नहीं करेगा, लेकिन आपको निर्भरता के साथ-साथ product service के साथ काम करना होगा।

jsfiddle

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

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