मॉड्यूल घोषित करने का 'सर्वश्रेष्ठ' तरीका
जैसे ही कोणीय वैश्विक दायरे में है और मॉड्यूल इसके वैरिएबल में सहेजे जाते हैं, आप इसके माध्यम से मॉड्यूल तक पहुंच सकते हैं angular.module('mymod'):
// one file
// NOTE: the immediately invoked function expression
// is used to exemplify different files and is not required
(function(){
// declaring the module in one file / anonymous function
// (only pass a second parameter THIS ONE TIME as a redecleration creates bugs
// which are very hard to dedect)
angular.module('mymod', []);
})();
// another file and/or another anonymous function
(function(){
// using the function form of use-strict...
"use strict";
// accessing the module in another.
// this can be done by calling angular.module without the []-brackets
angular.module('mymod')
.controller('myctrl', ['dep1', function(dep1){
//..
}])
// appending another service/controller/filter etc to the same module-call inside the same file
.service('myservice', ['dep2', function(dep2){
//...
}]);
// you can of course use angular.module('mymod') here as well
angular.module('mymod').controller('anothermyctrl', ['dep1', function(dep1){
//..
}])
})();
किसी अन्य वैश्विक चर की आवश्यकता नहीं है।
बेशक यह सभी वरीयताओं पर निर्भर करता है, लेकिन मुझे लगता है कि यह सबसे अच्छा अभ्यास है
- आपको वैश्विक दायरे को प्रदूषित नहीं करना है
- आप अपने मॉड्यूल को हर जगह एक्सेस कर सकते हैं और उन्हें और उनके कार्यों को अलग-अलग फ़ाइलों में क्रमबद्ध कर सकते हैं
- आप "उपयोग सख्त" के फ़ंक्शन-रूप का उपयोग कर सकते हैं;
- फाइलों का लोडिंग ऑर्डर उतना मायने नहीं रखता है
अपने मॉड्यूल और फ़ाइलों को सॉर्ट करने के लिए विकल्प
मॉड्यूल को घोषित करने और एक्सेस करने का यह तरीका आपको बहुत लचीला बनाता है। आप फ़ंक्शन-प्रकार (जैसे किसी अन्य उत्तर में वर्णित) या मार्ग के माध्यम से मॉड्यूल को सॉर्ट कर सकते हैं, जैसे:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
आप इसे अंत में कैसे छांटते हैं यह व्यक्तिगत स्वाद और परियोजना के पैमाने और प्रकार का मामला है। मैं व्यक्तिगत रूप से सभी अलग-अलग परीक्षण-फाइलों सहित, एक ही फ़ोल्डर (निर्देश, नियंत्रकों, सेवाओं और फ़िल्टर के उप-फ़ोल्डर में आदेशित) के अंदर एक मॉड्यूल की सभी फ़ाइलों को समूह में रखना पसंद करता हूं, क्योंकि यह आपके मॉड्यूल को अधिक पुन: उपयोग करने योग्य बनाता है। इस प्रकार मध्यम आकार की परियोजनाओं में मैं एक बेस-मॉड्यूल के साथ समाप्त होता हूं, जिसमें सभी बुनियादी मार्ग और उनके नियंत्रक, सेवाएं, निर्देश और अधिक या कम जटिल उप-मॉड्यूल शामिल हैं, जब मुझे लगता है कि वे अन्य परियोजनाओं के लिए भी उपयोगी हो सकते हैं, जैसे। :
/******** modularizing feature-sets **********/
/controllers
/directives
/filters
/services
/my-map-sub-module
/my-map-sub-module/controllers
/my-map-sub-module/services
app.js
...
angular.module('app', [
'app.directives',
'app.filters',
'app.controllers',
'app.services',
'myMapSubModule'
]);
angular.module('myMapSubModule',[
'myMapSubModule.controllers',
'myMapSubModule.services',
// only if they are specific to the module
'myMapSubModule.directives',
'myMapSubModule.filters'
]);
बहुत बड़ी परियोजनाओं के लिए, मैं कभी-कभी मार्गों द्वारा समूहीकरण मॉड्यूलों को समाप्त करता हूं, जैसा कि ऊपर वर्णित है या कुछ चयनित मुख्य मार्गों या यहां तक कि मार्गों और कुछ चयनित घटकों का एक संयोजन है, लेकिन यह वास्तव में निर्भर करता है।
संपादित करें:
सिर्फ इसलिए कि यह संबंधित है और मैं हाल ही में फिर से भाग गया: अच्छी तरह से ध्यान रखें कि आप केवल एक बार एक मॉड्यूल बनाते हैं (कोणीय गति-समारोह में दूसरा पैरामीटर जोड़कर)। यह आपके एप्लिकेशन को गड़बड़ कर देगा और इसका पता लगाना बहुत कठिन हो सकता है।
2015 ईडीआईटी को छाँटने वाले मॉड्यूल पर:
डेढ़ साल बाद कोणीय-अनुभव के बाद, मैं यह जोड़ सकता हूं कि आपके ऐप के भीतर अलग-अलग नामित मॉड्यूल का उपयोग करने से लाभ कुछ हद तक सीमित हैं क्योंकि एएमडी अभी भी कोणीय और सेवाओं, निर्देशों और फिल्टर के साथ अच्छी तरह से काम नहीं करता है वैसे भी कोणीय संदर्भ में विश्व स्तर पर उपलब्ध हैं ( जैसा कि यहाँ पर उदाहरण दिया गया है )। हालांकि अभी भी एक शब्दार्थ और संरचनात्मक लाभ है और यह एक मॉड्यूल को शामिल करने में सक्षम हो सकता है / जिसमें कोड की एक पंक्ति के साथ या बाहर टिप्पणी की गई हो।
यह लगभग कभी भी उप-मॉड्यूल को अलग-अलग प्रकार से समझ में नहीं आता है (उदाहरण के लिए 'myMapSubModule.controllers') क्योंकि वे आमतौर पर एक-दूसरे पर निर्भर होते हैं।