Składnik jest dyrektywą z szablonem, a @Componentdekorator jest tak naprawdę @Directivedekoratorem wyposażonym w funkcje zorientowane na szablon - źródło .
Cosmin Ababei,
2
Dyrektywa kontra składnik to nowa usługa vs fabryka. Zamieszanie jest również większe, ponieważ kiedy faktycznie wymaga innych komponentów z definicji komponentu, określasz je w directivestablicy ... może komentarz Lidy Weng poniżej pomaga nieco wyjaśnić, że komponent „to w rzeczywistości rozszerzona dyrektywa”
Nobita,
1
komponenty faktycznie rozszerzają dyrektywę, po prostu wymagają szablonu (HTML) w przeciwieństwie do dyrektyw. Aby użyć istniejącego elementu HTML, należy użyć dyrektywy, a komponent tworzy elementy HTML
Marko Niciforovic
Odpowiedzi:
546
@Component wymaga widoku, podczas gdy @Directive nie.
Dyrektywy
Porównuję @Directive do dyrektywy Angular 1.0 z opcjąrestrict: 'A' (Dyrektywy nie ograniczają się do użycia atrybutów). Dyrektywy dodają zachowanie do istniejącego elementu DOM lub istniejącej instancji komponentu. Jednym z przykładów zastosowania dyrektywy byłoby zarejestrowanie kliknięcia elementu.
Składnik, zamiast dodawać / modyfikować zachowanie, tak naprawdę tworzy własny widok (hierarchia elementów DOM) z dołączonym zachowaniem. Przykładem tego może być element karty kontaktowej:
ContactCardto komponent interfejsu użytkownika wielokrotnego użytku, którego moglibyśmy użyć w dowolnym miejscu naszej aplikacji, nawet w innych komponentach. Zasadniczo stanowią one elementy składowe interfejsu użytkownika naszych aplikacji.
W podsumowaniu
Napisz komponent, jeśli chcesz utworzyć zestaw elementów DOM interfejsu wielokrotnego użytku z niestandardowym zachowaniem. Napisz dyrektywę, gdy chcesz zapisać zachowanie wielokrotnego użytku, aby uzupełnić istniejące elementy DOM.
czy adnotacja @directive ma właściwość template / templateUrl?
Pardeep jain
7
Czy ta odpowiedź jest nadal prawdziwa? Samouczek angular2 tworzy komponent bez widoku
Tamas Hegedus
nie ma widoku, ale szablonurl lub szablon są obowiązkowe w komponencie
Luca Trazzi
4
Lubię tego rodzaju odpowiedzi, ale naprawdę byłbym wdzięczny za aktualizację, gdy nastąpiły kluczowe zmiany w strukturze.
Memet Olsen,
Trzeba to trochę zmienić. Zmieniono API kątowe 2. Nie ma już dekoratora widoku.
DaSch
79
składniki
Aby zarejestrować komponent, używamy @Componentadnotacji metadanych.
Komponent to dyrektywa, która wykorzystuje cień DOM do tworzenia zachowań zamkniętych zwanych komponentami. Komponenty są zwykle używane do tworzenia widgetów interfejsu użytkownika.
Komponent służy do podziału aplikacji na mniejsze komponenty.
Na element DOM może być obecny tylko jeden składnik.
@View dekorator lub szablon templateurl są obowiązkowe w komponencie.
Dyrektywa
Aby zarejestrować dyrektywy, używamy @Directiveadnotacji metadanych.
Dyrektywa służy do dodawania zachowania do istniejącego elementu DOM.
Dyrektywa służy do projektowania elementów wielokrotnego użytku.
Na jeden element DOM można zastosować wiele dyrektyw.
Nie jestem pewien, dlaczego przegłosowałeś zbyt wiele. Wygląda na to, że @Component to dla mnie dyrektywa z szablonem (do generowania widoku).
Harry Ninh
22
W programie Angular 2 i nowszym „wszystko jest składnikiem”. Komponenty to główny sposób, w jaki budujemy i określamy elementy i logikę na stronie, zarówno za pomocą niestandardowych elementów, jak i atrybutów, które dodają funkcjonalność do naszych istniejących komponentów.
Tylko @Componentmoże być węzeł w drzewie wykrywania zmian. Oznacza to, że nie można ustawić ChangeDetectionStrategy.OnPushw @Directive. Pomimo tego, dyrektywa może mieć @Inputi @Outputwłaściwości, i można z niej wstrzykiwać i manipulować komponentami hosta ChangeDetectorRef. Użyj Komponentów, gdy potrzebujesz szczegółowej kontroli nad drzewem wykrywania zmian.
W kontekście programowania dyrektywy dostarczają kompilatorowi wskazówek dotyczących zmiany sposobu przetwarzania danych wejściowych, tj. Zmiany niektórych zachowań.
„Dyrektywy umożliwiają dołączanie zachowania do elementów w DOM”.
Dyrektywy są podzielone na 3 kategorie:
Atrybut
Strukturalny
Składnik
Tak, w Angular 2 komponenty są rodzajem dyrektywy. Według Doktora
„Elementy kątowe są podzbiorem dyrektyw. W przeciwieństwie do dyrektyw komponenty zawsze mają szablon i tylko jeden komponent może być utworzony na element w szablonie. ”
Komponenty Angular 2 są implementacją koncepcji Web Component . Składniki sieciowe składają się z kilku oddzielnych technologii. Komponenty sieci Web można traktować jako widżety interfejsu użytkownika wielokrotnego użytku, które są tworzone przy użyciu otwartej technologii internetowej.
Zatem w dyrektywach podsumowujących Mechanizm, za pomocą którego łączymy zachowanie z elementami w DOM, składający się z typów strukturalnych, atrybutów i komponentów.
Komponenty są szczególnym rodzajem dyrektywy, która pozwala nam korzystać z funkcjonalności komponentu internetowego AKA wielokrotnego użytku - zamknięte elementy wielokrotnego użytku dostępne w całej naszej aplikacji.
Jeśli odniesiesz się do oficjalnych dokumentów kątowych
https://angular.io/guide/attribute-directives
Istnieją trzy rodzaje dyrektyw w Angular:
Komponenty - dyrektywy z szablonem.
Dyrektywy strukturalne - zmień układ DOM, dodając i usuwając elementy DOM. np. * ngIf
Dyrektywy atrybutów — zmień wygląd lub zachowanie elementu, komponentu lub innej dyrektywy. np. [ngClass].
W miarę wzrostu aplikacji napotykamy trudności w utrzymywaniu wszystkich tych kodów. W celu ponownego użycia rozdzielamy naszą logikę na inteligentne komponenty i głupie komponenty i używamy dyrektyw (strukturalnych lub atrybutów) do wprowadzania zmian w DOM.
Komponenty są najbardziej podstawowym składnikiem interfejsu użytkownika aplikacji Angular. Aplikacja Angular zawiera drzewo komponentów Angular. Nasza aplikacja w Angular jest zbudowana na drzewie komponentów . Każdy komponent powinien mieć swój szablon, styl, cykl życia, selektor itp. Zatem każdy komponent ma swoją strukturę Możesz traktować je jako osobną, niezależną małą aplikację internetową z własnym szablonem i logiką oraz możliwością komunikacji i używania z innymi składniki.
Przykładowy plik .ts dla składnika:
import { Component } from '@angular/core';
@Component({
// component attributes
selector: 'app-training',
templateUrl: './app-training.component.html',
styleUrls: ['./app-training.component.less']
})
export class AppTrainingComponent {
title = 'my-app-training';
}
i jego widok szablonu ./app.component.html:
Hello {{title}}
Następnie możesz renderować szablon AppTrainingComponent z jego logiką w innych komponentach (po dodaniu go do modułu)
<div>
<app-training></app-training>
</div>
i wynik będzie
<div>
my-app-training
</div>
jak renderowano tutaj element AppTrainingComponent
Dyrektywa zmienia wygląd lub zachowanie istniejącego elementu DOM. Na przykład [ngStyle] to dyrektywa. Dyrektywy mogą rozszerzać komponenty (mogą być używane w nich), ale nie budują całej aplikacji . Powiedzmy, że obsługują tylko komponenty. Nie mają własnego szablonu (ale oczywiście można nimi manipulować).
@Component
dekorator jest tak naprawdę@Directive
dekoratorem wyposażonym w funkcje zorientowane na szablon - źródło .directives
tablicy ... może komentarz Lidy Weng poniżej pomaga nieco wyjaśnić, że komponent „to w rzeczywistości rozszerzona dyrektywa”Odpowiedzi:
@Component wymaga widoku, podczas gdy @Directive nie.
Dyrektywy
Porównuję @Directive do dyrektywy Angular 1.0 z opcją(Dyrektywy nie ograniczają się do użycia atrybutów). Dyrektywy dodają zachowanie do istniejącego elementu DOM lub istniejącej instancji komponentu. Jednym z przykładów zastosowania dyrektywy byłoby zarejestrowanie kliknięcia elementu.restrict: 'A'
Który byłby użyty w ten sposób:
składniki
Składnik, zamiast dodawać / modyfikować zachowanie, tak naprawdę tworzy własny widok (hierarchia elementów DOM) z dołączonym zachowaniem. Przykładem tego może być element karty kontaktowej:
Który byłby użyty w ten sposób:
ContactCard
to komponent interfejsu użytkownika wielokrotnego użytku, którego moglibyśmy użyć w dowolnym miejscu naszej aplikacji, nawet w innych komponentach. Zasadniczo stanowią one elementy składowe interfejsu użytkownika naszych aplikacji.W podsumowaniu
Napisz komponent, jeśli chcesz utworzyć zestaw elementów DOM interfejsu wielokrotnego użytku z niestandardowym zachowaniem. Napisz dyrektywę, gdy chcesz zapisać zachowanie wielokrotnego użytku, aby uzupełnić istniejące elementy DOM.
Źródła:
źródło
składniki
@Component
adnotacji metadanych.@View
dekorator lub szablon templateurl są obowiązkowe w komponencie.Dyrektywa
@Directive
adnotacji metadanych.Źródła:
http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html
źródło
Składnik to dyrektywa z szablonem, a
@Component
dekorator jest tak naprawdę@Directive
dekoratorem wyposażonym w funkcje zorientowane na szablon.źródło
http://learnangular2.com/components/
Ale jakie dyrektywy działają w Angular2 +?
https://angular.io/docs/ts/latest/guide/attribute-directives.html
Tak więc w Angular2 i nowszych wersjach dyrektywy są atrybutami, które dodają funkcje do elementów i komponentów .
Spójrz na próbkę poniżej z Angular.io:
Więc co zrobi, rozszerzy ci komponenty i elementy HTML o dodanie żółtego tła i możesz użyć go jak poniżej:
Ale komponenty utworzą pełne elementy ze wszystkimi funkcjami, takimi jak poniżej:
i możesz użyć go jak poniżej:
Gdy użyjemy znacznika w kodzie HTML, ten komponent zostanie utworzony, a konstruktor zostanie wywołany i zrenderowany.
źródło
Wykrywanie zmian
Tylko
@Component
może być węzeł w drzewie wykrywania zmian. Oznacza to, że nie można ustawićChangeDetectionStrategy.OnPush
w@Directive
. Pomimo tego, dyrektywa może mieć@Input
i@Output
właściwości, i można z niej wstrzykiwać i manipulować komponentami hostaChangeDetectorRef
. Użyj Komponentów, gdy potrzebujesz szczegółowej kontroli nad drzewem wykrywania zmian.źródło
W kontekście programowania dyrektywy dostarczają kompilatorowi wskazówek dotyczących zmiany sposobu przetwarzania danych wejściowych, tj. Zmiany niektórych zachowań.
Dyrektywy są podzielone na 3 kategorie:
Tak, w Angular 2 komponenty są rodzajem dyrektywy. Według Doktora
Komponenty Angular 2 są implementacją koncepcji Web Component . Składniki sieciowe składają się z kilku oddzielnych technologii. Komponenty sieci Web można traktować jako widżety interfejsu użytkownika wielokrotnego użytku, które są tworzone przy użyciu otwartej technologii internetowej.
źródło
Jeśli odniesiesz się do oficjalnych dokumentów kątowych
Istnieją trzy rodzaje dyrektyw w Angular:
W miarę wzrostu aplikacji napotykamy trudności w utrzymywaniu wszystkich tych kodów. W celu ponownego użycia rozdzielamy naszą logikę na inteligentne komponenty i głupie komponenty i używamy dyrektyw (strukturalnych lub atrybutów) do wprowadzania zmian w DOM.
źródło
składniki
Komponenty są najbardziej podstawowym składnikiem interfejsu użytkownika aplikacji Angular. Aplikacja Angular zawiera drzewo komponentów Angular. Nasza aplikacja w Angular jest zbudowana na drzewie komponentów . Każdy komponent powinien mieć swój szablon, styl, cykl życia, selektor itp. Zatem każdy komponent ma swoją strukturę Możesz traktować je jako osobną, niezależną małą aplikację internetową z własnym szablonem i logiką oraz możliwością komunikacji i używania z innymi składniki.
Przykładowy plik .ts dla składnika:
i jego widok szablonu ./app.component.html:
Następnie możesz renderować szablon AppTrainingComponent z jego logiką w innych komponentach (po dodaniu go do modułu)
i wynik będzie
jak renderowano tutaj element AppTrainingComponent
Zobacz więcej o komponentach
Dyrektywy
Dyrektywa zmienia wygląd lub zachowanie istniejącego elementu DOM. Na przykład [ngStyle] to dyrektywa. Dyrektywy mogą rozszerzać komponenty (mogą być używane w nich), ale nie budują całej aplikacji . Powiedzmy, że obsługują tylko komponenty. Nie mają własnego szablonu (ale oczywiście można nimi manipulować).
Przykładowa dyrektywa:
I jego użycie:
Zobacz więcej o dyrektywach
źródło