Cara 'terbaik' untuk mendeklarasikan modul
Karena angular berada pada cakupan global itu sendiri dan modul disimpan ke variabelnya, Anda dapat mengakses modul melalui 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){
//..
}])
})();
Tidak ada variabel global lain yang diperlukan.
Tentu saja itu semua tergantung pada preferensi, tapi saya pikir ini adalah jenis praktik terbaik, sebagai
- Anda tidak perlu mencemari ruang lingkup global
- Anda dapat mengakses modul Anda di mana saja dan menyortirnya serta fungsinya ke dalam file yang berbeda sesuai keinginan
- Anda dapat menggunakan bentuk-fungsi dari "gunakan ketat";
- urutan pemuatan file tidak terlalu menjadi masalah
Opsi untuk menyortir modul dan file Anda
Cara mendeklarasikan dan mengakses modul ini membuat Anda sangat fleksibel. Anda dapat mengurutkan modul melalui tipe fungsi (seperti dijelaskan dalam jawaban lain) atau melalui rute, misalnya:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
Bagaimana Anda memilahnya pada akhirnya adalah masalah selera pribadi dan skala serta jenis proyek. Saya pribadi suka mengelompokkan semua file modul di dalam folder yang sama (diurutkan ke dalam sub-folder arahan, pengontrol, layanan, dan filter), termasuk semua file uji yang berbeda, karena membuat modul Anda lebih dapat digunakan kembali. Jadi dalam proyek berukuran menengah saya berakhir dengan modul-dasar, yang mencakup semua rute dasar dan pengontrol, layanan, arahan dan sub-modul yang kurang lebih kompleks, ketika saya pikir mereka dapat berguna untuk proyek lain juga, misalnya :
/******** 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'
]);
Untuk proyek yang sangat besar, terkadang saya mengelompokkan modul berdasarkan rute, seperti yang dijelaskan di atas atau dengan beberapa rute utama yang dipilih atau bahkan kombinasi rute dan beberapa komponen yang dipilih, tetapi itu sangat tergantung.
EDIT:
Hanya karena itu terkait dan saya bertemu lagi baru-baru ini: Berhati-hatilah karena Anda membuat modul hanya sekali (dengan menambahkan parameter kedua ke angular.module-function). Ini akan mengacaukan aplikasi Anda dan bisa sangat sulit dideteksi.
EDIT 2015 tentang modul penyortiran:
Satu setengah tahun pengalaman bersudut nanti, saya dapat menambahkan bahwa manfaat dari menggunakan modul dengan nama yang berbeda dalam aplikasi Anda agak terbatas karena AMD masih tidak benar-benar berfungsi dengan baik dengan Angular dan layanan, arahan, dan filter tersedia secara global dalam konteks sudut ( seperti yang dicontohkan di sini ). Meskipun demikian, masih ada manfaat semantik dan struktural dan mungkin akan membantu jika menyertakan / mengecualikan modul dengan satu baris kode yang diberi komentar masuk atau keluar.
Ini juga hampir tidak pernah masuk akal untuk memisahkan sub-modul berdasarkan jenis (mis. 'MyMapSubModule.controllers') karena mereka biasanya bergantung satu sama lain.