SORU
13 Kasım 2013, ÇARŞAMBA


En iyi modül bildirimi için uygulamalar AngularJS?

Açısal modülleri uygulamam bildirilen bir grup var. Ben aslında onlara "zincirleme" sözdizimi şu şekilde: . ilan kullanmaya başladı

angular.module('mymodule', [])
    .controller('myctrl', ['dep1', function(dep1){ ... }])
    .service('myservice', ['dep2', function(dep2){ ... }])
    ... // more here

Ama bu çok kolay okumak için değil, onları böyle bir modül değişkeni kullanarak ilan başladım karar verdim:

var mod = angular.module('mymodule', []);

mod.controller('myctrl', ['dep1', function(dep1){ ... }]);

mod.service('myservice', ['dep2', function(dep2){ ... }]);
...

İkinci sözdizimi benim için çok daha okunaklı görünüyor, ama benim tek şikayetim bu sözdizimi global kapsam mod değişken bırakır. Eğer başka bir değişken mod adlı bu sonraki (ve diğer konularda genel Değişkenler ile ilişkili) ile geçersiz olur.

Benim sorum, bu en iyi yolu nedir? Ya da bunun gibi bir şey yapmak daha iyi olur?:

(function(){
    var mod = angular.module('mymod', []);
    mod.controller('myctrl', ['dep1', function(dep1){ ... }]);
    mod.service('myservice', ['dep2', function(dep2){ ... }]);
    ...
})();

Hatta bakım için yeterince önemli mi? Merak ettim neymiş bu "en iyi uygulamalar" modül bildirimi için. Şimdiden teşekkürler.

CEVAP
13 Kasım 2013, ÇARŞAMBA


'İyi' bir modül bildirmek için

Açısal kendisi ve modülleri değişkene kaydedilir genel kapsam olarak angular.module('mymod')) modülleri erişebilirsiniz:

// 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){
      //..
  }])
})();

Hayır diğer küresel değişkenleri gereklidir.

Tabii ki tüm tercihler değişir, ama bu tür en iyi uygulama olarak düşünüyorum

  1. genel kapsam kirletmeye gerek yok
  2. modüller her yerde erişim ve onları farklı dosyalara ve görevleri sıralayabilirsiniz
  3. işlev-form kullanabilirsiniz "sıkı";
  4. dosyaları yükleme sırası pek önemli değil

Modülleri ve dosyaları sıralamak için Seçenek

Ve modülleri ilan erişen bu şekilde çok esnek hale getirir. Yol üzerinden bir işlev-başka bir cevap yazın açıklandığı gibi) ya da, örneğin modülleri sıralayabilirsiniz:

/******** sorting by route **********/    
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...

Sonunda bu sıralama ne kadar kişisel zevk ve proje ölçek ve türde bir konu. Ben şahsen grup, tüm dosyaları bir modül içinde aynı klasör (sipariş içine alt klasörler direktifleri, kontrolörler, hizmetleri ve filtreler), dahil olmak üzere tüm farklı test-dosyaları olarak yapar modülleri daha fazla kullanılabilir. Böylece orta ölçekli projeleri ben bir erkeğim tabanı modülü içeren tüm temel yolları ve onların denetleyicileri, hizmetleri, direktifler ve daha fazla veya daha az karmaşık alt modül, bence onlar yararlı olabileceğini için diğer projeleri de,örneğin:

/******** 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 bir proje için, ben bazen bazı ana yolları ve rotaları bir kombinasyonu ve bazı seçilmiş Bileşenler ile ya da yukarıda açıklandığı gibi yollarla gruplama modül sonunda, ama gerçekten bağlıdır.

DÜZENLEME: Sırf ilgilidir ve bu çok yakın zamanda tekrar koştu:Bir modülü sadece bir kez oluşturduğunuz iyi bak(açısal.ikinci bir parametre ekleyerek modül-fonksiyonu). Bu uygulama karmaşa ve tespit etmek çok zor olabilir.

2015 sıralama modülleri DÜZENLE: Bir buçuk yıl açısal deneyim sonra, ben ekleyebilirsiniz bu faydaları ile farklı adlı bir modül içinde app biraz sınırlı gibi AMD hala değil çok çalışma ile Açısal ve hizmetleri, Yönerge ve filtreler genel olarak kullanılabilir içindeki açısal bağlamda zaten (as exemplified here). Hala bir anlam var ve yararlı tek bir kod satırı ile bir modül hariç tutmak/ dahil etmek mümkün olduğu halde, yapısal fayda ya da diye.

Ayrıca neredeyse hiçbir zaman çok mantıklı, kendi içine denetleyicileri ve hizmetleri ve benzeri ayırmak için yapar bunu alt modülleri (örn. 'myMapSubModule.birbirlerine') gibi genellikle bağlı denetleyicileri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • John Lynn

    John Lynn

    8 Ocak 2010