Wszystko zależy od tego, czego chcesz od fragmentu kodu. Osobiście, jeśli kod nie ma żadnej logiki lub nawet nie potrzebuje kontrolera, to idę z ngInclude
. Zazwyczaj umieszczam duże, bardziej „statyczne” fragmenty HTML, których nie chcę zaśmiecać widoku. (tj. powiedzmy, że duża tabela, której dane i tak pochodzą z kontrolera nadrzędnego. Czystsze jest mieć <div ng-include="bigtable.html" />
niż wszystkie te wiersze zaśmiecające Widok)
Jeśli istnieje logika, manipulacja DOM lub potrzebujesz możliwości dostosowania (inaczej renderowania) w różnych instancjach, to directives
są lepszym wyborem (na początku są zniechęcające, ale są bardzo potężne, daj temu czas) .
ngInclude
Czasami zauważysz, ngInclude's
że wpływa na to ich wygląd zewnętrzny $scope
/ interface
. Na przykład duży / skomplikowany repeater. Z tego powodu te 2 interfejsy są ze sobą powiązane. Jeśli coś w głównej części się $scope
zmieni, musisz zmienić / zmienić swoją logikę w ramach dołączonej części.
Dyrektywy
Z drugiej strony dyrektywy mogą mieć wyraźne zakresy / kontrolery / itp. Więc jeśli myślisz o scenariuszu, w którym musiałbyś ponownie użyć czegoś wiele razy, możesz zobaczyć, jak podłączenie własnego zakresu ułatwiłoby życie i zmniejszyło mylące.
Poza tym za każdym razem, gdy będziesz w ogóle wchodzić w interakcję z DOM, powinieneś użyć dyrektywy. To sprawia, że jest lepszy do testowania i oddziela te akcje od kontrolera / usługi / itp., Co jest czymś, czego chcesz!
Wskazówka: jeśli zależy Ci na IE8, pamiętaj, aby nie używać ograniczenia: „E”! Są sposoby na obejście tego, ale są denerwujące. Po prostu ułatw sobie życie i trzymaj się atrybutu / itp.<div my-directive />
Komponenty [aktualizacja 01.03.2016]
Dodany w Angular 1.5, jest zasadniczo opakowaniem .directve()
. Komponent powinien być używany przez większość czasu. Usuwa wiele standardowych kodów dyrektywy, domyślnie ustawiając takie rzeczy jak restrict: 'E', scope : {}, bindToController: true
. Gorąco polecam używanie ich do prawie wszystkiego w twojej aplikacji, aby móc łatwiej przejść na Angular2.
Podsumowując:
Powinieneś tworzyć komponenty i dyrektywy przez większość czasu.
- Bardziej rozszerzalny
- Możesz szablon i mieć swój plik na zewnątrz (np. NgInclude)
- Możesz użyć zakresu nadrzędnego lub własnego zakresu izolowanego w ramach dyrektywy.
- Lepsze ponowne wykorzystanie w całej aplikacji
Aktualizacja 3/1/2016
Teraz, gdy Angular 2 powoli się kończy i znamy ogólny format (oczywiście nadal będą pewne zmiany tu i tam), po prostu chcieliśmy dodać, jak ważne jest to zrobić components
(czasami dyrektywy, jeśli chcesz, aby były ograniczone: '' E 'na przykład).
Komponenty są bardzo podobne do Angular 2 @Component
. W ten sposób hermetyzujemy logikę i html w tym samym obszarze.
Upewnij się, że zawarłeś jak najwięcej rzeczy w komponentach, dzięki temu przejście na Angular 2 będzie o wiele łatwiejsze! (Jeśli zdecydujesz się na przejście)
Oto fajny artykuł opisujący ten proces migracji za pomocą directives
(bardzo podobny, jeśli zamierzasz używać komponentów oczywiście): http://angular-tips.com/blog/2015/09/migrating-directives-to-angular-2/