AngularJS: ngInclude vs direktif


93

Bir yönergeyi ne zaman kullanacağımı ve ne zaman nginclude kullanmanın daha uygun olacağını tam olarak anlamıyorum. Şu örneği ele alalım: password-and-confirm-input-fields.htmlBir parola girmek ve onaylamak için html olan bir kısmım var . Bunu hem kayıt sayfasında hem de şifre değiştirme sayfasında kullanıyorum. Bu iki sayfanın her biri bir denetleyiciye sahiptir, kısmi html'nin özel denetleyicisi yoktur.

Direktif ngIncludemi yoksa bunun için mi kullanmalıyım ?


Her seferinde bir yönerge ile giderdim, ancak daha deneyimli Angular insanların ne söyleyeceğini merak ediyorum.
Austin Mullins

1
Gerçekten bağımsız bir bileşense, muhtemelen kendisiyle ilişkilendirilmiş kendi denetleyicisine sahip olmalıdır. IMO, kısmi kullanırım - ama biraz daha girdi istiyorum
tymeJV

4
Bu kısmi için gerekli herhangi bir js kodu varsa, bir yönerge kullanın. Yalnızca HTML ise ngInclude kullanın.
Daniel Beck

Yanıtlar:


122

Her şey kod parçanızdan ne istediğinize bağlıdır. Şahsen, kodun herhangi bir mantığı yoksa veya bir denetleyiciye bile ihtiyaç duymuyorsa, o zaman giderim ngInclude. Genelde, burada görünümü karıştırmak istemediğim daha büyük "statik" html parçalarını koyarım. (yani: Verileri yine de ana Denetleyiciden gelen büyük bir tablo diyelim. <div ng-include="bigtable.html" />Görünümü dolduran tüm satırlardan daha temizdir )

Mantık, DOM manipülasyonu varsa veya kullanıldığı farklı durumlarda özelleştirilebilir olması (başka bir deyişle farklı şekilde işlenmesi) gerekiyorsa, o zaman directivesdaha iyi bir seçimdir (ilk başta ürkütücüler, ancak çok güçlüler, zaman verin) .

ngInclude

Bazen ngInclude'sbunların dış görünüşlerinden etkilendiğini göreceksiniz $scope/ interface. Büyük / karmaşık bir tekrarlayıcı gibi diyelim. Bu 2 arayüz bu nedenle birbirine bağlanmıştır. Ana $scopekısımda bir şey değişirse, dahil edilen kısmın içinde mantığınızı değiştirmelisiniz / değiştirmelisiniz.

Direktifler

Öte yandan, direktiflerin açık kapsamları / denetleyicileri vb. Olabilir . Dolayısıyla, bir şeyi birden çok kez yeniden kullanmanız gereken bir senaryo düşünüyorsanız, kendi kapsamına sahip olmanın hayatı nasıl kolaylaştıracağını ve azaltacağını görebilirsiniz. kafa karıştırıcı.

Ayrıca, DOM ile herhangi bir etkileşimde bulunacağınız her zaman, bir yönerge kullanmalısınız. Bu, test için daha iyi hale getirir ve bu eylemleri bir kontrolör / hizmet / vb .'den ayırır, ki bu istediğiniz bir şeydir!

İpucu: çalışmadığından emin olun ve değil kısıtlamak kullanmak: 'E' IE8'de veriyorsan! Bunun etrafından dolaşmanın yolları var ama can sıkıcı. Sadece hayatı kolaylaştırın ve nitelik / vb. İle devam edin.<div my-directive />

Bileşenler [Güncelleme 01.03.2016]

Angular 1.5'e eklendi, esasen etrafta bir sarmalayıcı .directve(). Bileşen çoğu zaman kullanılmalıdır. Gibi şeylere varsayılan olarak birçok standart yönerge kodunu kaldırır restrict: 'E', scope : {}, bindToController: true. Angular2'ye daha kolay geçiş yapabilmek için bunları uygulamanızdaki hemen hemen her şey için kullanmanızı şiddetle tavsiye ederim.

Sonuç olarak:

Çoğu zaman Bileşenler ve Yönergeler oluşturmalısınız .

  • Daha genişletilebilir
  • Dosyanıza harici olarak şablon oluşturabilir ve sahip olabilirsiniz (ngInclude gibi)
  • Ana kapsamı veya yönerge içinde kendi izolat kapsamını kullanmayı seçebilirsiniz .
  • Uygulamanız boyunca daha iyi yeniden kullanım


Güncelleme 3/1/2016

Artık Angular 2 yavaşça toparlandığına ve genel formatın (tabii ki burada ve orada bazı değişiklikler olacağını) biliyoruz, sadece yapmanın ne kadar önemli olduğunu eklemek istiyoruz components(bazen kısıtlamalarına ihtiyacınız varsa yönergeler: ' Örneğin E ').

Bileşenler Angular 2'lere çok benzer@Component . Bu şekilde logic & html'yi aynı alanda sarmalıyoruz.


Bileşenlerde olabildiğince çok şeyi sarmaladığınızdan emin olun, bu, Angular 2'ye geçişi çok daha kolay hale getirecektir! (Geçiş yapmayı seçerseniz)

İşte bu taşıma sürecini directives(tabii ki bileşenleri kullanacak olsaydınız çok benzer) açıklayan güzel bir makale : http://angular-tips.com/blog/2015/09/migrating-directives-to-angular-2/


5
Bu cevaba katılıyorum. Direktifler için öğrenme eğrisi diktir, ancak bir kez aldığınızda gerçekten karşılığını verir.
Jazzy

@mcpDESIGNS, belki de bu cevaba tam olarak uymayan bir durum (en azından ilk iki paragraf değil). Kendi denetleyicisine sahip bir nav-bölümüm varsa ve bunu yalnızca bir kez kullanacağım (index.html-dosyasında), o zaman bu muhtemelen bir kısmi olmalı ve yalnızca bir kez kullanıldığı için bir yönerge değil ( kendi mantığına sahip olsa bile ngview'in bir parçası olarak dahil edilmemesi anlamında ayrı bir uygulama. Veya?
EricC

Bu hala kafa karıştırıcı ... ngInclude'u kullanırken bir kontrol cihazı da belirleyebilirsiniz, şuna bakın: stackoverflow.com/questions/13811948/…
Marwen Trabelsi

1
Elbette, ancak her zaman bir şekilde tamamen ana denetleyiciye bağlıdır. Bir direktif , şablon yüklendiğinde kendi içinde bir denetleyici oluşturabilir . Tamamen ayrı olabilir (isterseniz)
Mark Pieszak - Trilon.io

1
Yapabileceğiniz en iyi şey, bu kavramı bir fabrikaya veya başka bir şeye soyutlamaktır, bu şekilde onu bir linkişlev ve işin içinden çağırabilirsiniz ! Şüphesiz direktiflere dönüştürülmesi güzel olurdu :( @Arwin
Mark Pieszak - Trilon.io
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.