วิธีที่ 'ดีที่สุด' ในการประกาศโมดูล
เนื่องจากเชิงมุมอยู่ในขอบเขตส่วนกลางและโมดูลจะถูกบันทึกลงในตัวแปรคุณจึงสามารถเข้าถึงโมดูลผ่าน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'
]);
สำหรับโครงการใหญ่ ๆ บางครั้งฉันจะจัดกลุ่มโมดูลตามเส้นทางตามที่อธิบายไว้ข้างต้นหรือตามเส้นทางหลักที่เลือกไว้หรือแม้แต่การรวมกันของเส้นทางและส่วนประกอบที่เลือกบางส่วน แต่มันขึ้นอยู่กับจริงๆ
แก้ไข:
เพียงเพราะมันเกี่ยวข้องกันและเมื่อเร็ว ๆ นี้ฉันพบอีกครั้ง: ดูแลให้ดีว่าคุณสร้างโมดูลเพียงครั้งเดียว (โดยการเพิ่มพารามิเตอร์ที่สองให้กับ angular.module-function) สิ่งนี้จะทำให้แอปพลิเคชันของคุณยุ่งและตรวจจับได้ยากมาก
2015 แก้ไขในโมดูลการเรียงลำดับ:
หนึ่งปีครึ่งของประสบการณ์เชิงมุมในภายหลังฉันสามารถเพิ่มได้ว่าประโยชน์จากการใช้โมดูลที่มีชื่อแตกต่างกันภายในแอปของคุณนั้นค่อนข้าง จำกัด เนื่องจาก AMD ยังทำงานได้ไม่ดีกับ Angular และบริการคำสั่งและตัวกรอง มีอยู่ทั่วโลกในบริบทเชิงมุมอยู่ดี ( ดังตัวอย่างที่นี่ ) ยังคงมีประโยชน์เชิงความหมายและเชิงโครงสร้างอยู่และอาจเป็นประโยชน์ในการรวม / ไม่รวมโมดูลที่มีโค้ดบรรทัดเดียวที่แสดงความคิดเห็นเข้าหรือออก
นอกจากนี้ยังแทบไม่สมเหตุสมผลเลยที่จะแยกโมดูลย่อยตามประเภท (เช่น 'myMapSubModule.controllers') เนื่องจากมักจะพึ่งพาซึ่งกันและกัน