Bir modül bildirmenin 'en iyi' yolu
Açısal, genel kapsamın kendisinde olduğundan ve modüller değişkenine kaydedildiğinden, modüllere şu yolla erişebilirsiniz 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){
//..
}])
})();
Başka genel değişkenlere gerek yoktur.
Elbette hepsi tercihlere bağlıdır, ancak bunun en iyi uygulama olduğunu düşünüyorum.
- küresel kapsamı kirletmek zorunda değilsin
- modüllerinize her yerden erişebilir ve bunları ve işlevlerini istediğiniz zaman farklı dosyalara sıralayabilirsiniz
- "sıkı kullan" işlev biçimini kullanabilirsiniz;
- dosyaların yükleme sırası o kadar önemli değil
Modüllerinizi ve dosyalarınızı sıralama seçenekleri
Modülleri bildirmenin ve bunlara erişmenin bu yolu sizi çok esnek kılar. Modülleri işlev türü (başka bir yanıtta açıklandığı gibi) veya rota aracılığıyla sıralayabilirsiniz, örneğin:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
Sonunda nasıl sıralayacağınız, kişisel zevkiniz ve projenin ölçeği ve türü ile ilgilidir. Kişisel olarak, modüllerinizi daha yeniden kullanılabilir hale getirdiği için, tüm farklı test dosyaları da dahil olmak üzere, aynı klasör içindeki bir modülün tüm dosyalarını (yönergelerin, denetleyicilerin, hizmetlerin ve filtrelerin alt klasörlerinde sıralanmıştır) gruplamayı seviyorum. Bu nedenle, orta ölçekli projelerde, diğer projeler için de yararlı olabileceğini düşündüğümde, tüm temel yolları ve bunların kontrolörlerini, hizmetlerini, direktiflerini ve az ya da çok karmaşık alt modülleri içeren bir temel modül elde ederim. :
/******** 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'
]);
Çok büyük projeler için, bazen modülleri yukarıda açıklandığı gibi rotalara göre veya bazı seçilmiş ana rotalara veya hatta rotaların ve bazı seçilmiş bileşenlerin bir kombinasyonuna göre gruplandırıyorum, ama bu gerçekten bağlıdır.
DÜZENLEME:
Sadece ilgili olduğu ve yakın zamanda tekrar karşılaştığım için: Bir modülü yalnızca bir kez oluşturduğunuza dikkat edin (angular.module-function'a ikinci bir parametre ekleyerek). Bu, uygulamanızı bozar ve tespit edilmesi çok zor olabilir.
2015 Modülleri sıralama üzerine DÜZENLEME:
Bir buçuk yıllık açısal deneyimden sonra, uygulamanızda farklı adlandırılmış modülleri kullanmanın faydalarının biraz sınırlı olduğunu ekleyebilirim çünkü AMD hala Angular ve hizmetler, direktifler ve filtrelerle gerçekten iyi çalışmıyor her halükarda açısal bağlam içinde küresel olarak mevcuttur ( burada örneklendiği gibi ). Yine de anlamsal ve yapısal bir yararı vardır ve içeri veya dışarı yorumlanmış tek bir kod satırı olan bir modülü dahil etmek / hariç tutmak faydalı olabilir.
Ayrıca , genellikle birbirlerine bağlı olduklarından alt modülleri türe göre ayırmak (ör. 'MyMapSubModule.controllers') neredeyse hiçbir zaman çok mantıklı değildir .