Warum diese Frage Stack Overflow (und Ihr Gehirn) sprengt?
\nSie schreiben Ihr erstes Angular-Projekt. Sie erstellen eine Komponente, hängen den Dekorator @Component daran – alles funktioniert. Dann sehen Sie in fremdem Code @Directive und denken: „Warum? Das ist doch dasselbe?“. Spoiler: Nein, es ist nicht dasselbe. Aber Verwirrung entsteht bei 90% der Anfänger.
Die Frage „@Directive vs @Component in Angular“ hat auf Stack Overflow tausende Aufrufe nicht ohne Grund. Lassen Sie uns ein für alle Mal klären, worin der Unterschied besteht, wann man was verwendet und wie man sich im Vorstellungsgespräch nicht blamiert. Los geht's!
\n\nWas ist @Component? (Spoiler: Es ist auch @Directive)
\nZunächst – die Enthüllung. @Component ist ein Untertyp von @Directive. Ja, Sie haben richtig gehört. Jede Komponente in Angular ist eine Direktive. Aber mit einem wichtigen Unterschied: Eine Komponente hat eine Vorlage (template).
Der Dekorator @Component erbt alles von @Directive und fügt seine eigene „Besonderheit“ hinzu – die Möglichkeit, HTML zu rendern. Wenn eine Direktive ein „Verhalten“ ist, dann ist eine Komponente „Verhalten + ein Stück Benutzeroberfläche“.
Beispiel einer einfachen Komponente in TypeScript
\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'app-hello',\n template: `<h1>Hallo, {{name}}!</h1>`,\n styles: ['h1 { color: blue; }']\n})\nexport class HelloComponent {\n name: string = 'Welt';\n}\n\nHier ist HelloComponent eine vollwertige Komponente. Sie hat ihre eigene Vorlage, Styles und Logik. Sie kann in einer anderen Vorlage als <app-hello></app-hello> verwendet werden.
Was ist @Directive? (Reines Verhalten)
\nEine Direktive ist eine Klasse mit dem Dekorator @Directive, die das Verhalten oder Aussehen eines bestehenden DOM-Elements ändert. Eine Direktive hat keine eigene Vorlage. Sie erzeugt kein neues Element – sie „hängt“ sich an ein bereits vorhandenes.
In Angular gibt es drei Arten von Direktiven:
\n- \n
- Komponenten (ja, sie sind auch Direktiven) – mit Vorlage. \n
- Strukturelle Direktiven – ändern die DOM-Struktur (
*ngIf,*ngFor). \n - Attributdirektiven – ändern das Aussehen oder Verhalten eines Elements (
ngClass,ngStyle). \n
Beispiel einer Attributdirektive in TypeScript
\nimport { Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appHighlight]'\n})\nexport class HighlightDirective {\n constructor(private el: ElementRef) {}\n\n @HostListener('mouseenter') onMouseEnter() {\n this.el.nativeElement.style.backgroundColor = 'yellow';\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.el.nativeElement.style.backgroundColor = null;\n }\n}\n\nDiese Direktive hebt das Element bei Mausbewegung gelb hervor. Sie erzeugt keinen neuen DOM-Knoten – sie „verändert“ einen bestehenden. Verwendet wird sie so: <div appHighlight>Beweg die Maus über mich</div>.
Wesentliche Unterschiede @Directive vs @Component
\nLassen Sie es uns Schritt für Schritt aufschlüsseln. Hier ist eine Tabelle, die Ihnen hilft, den Unterschied ein für alle Mal zu merken:
\n\n| Eigenschaft | \n@Component | \n@Directive | \n
|---|---|---|
| Vorhandensein einer Vorlage (template) | \n✅ Ja, erforderlich | \n❌ Nein | \n
| Erzeugt ein neues DOM-Element | \n✅ Ja (über den Selektor) | \n❌ Nein (wird auf ein bestehendes angewendet) | \n
| Vorhandensein von Styles (styles) | \n✅ Ja, können isoliert werden | \n❌
BlogsBuchempfehlungenLesen Sie auch
Beste IDEs und Tools für die Java-Entwicklung im Jahr 2024
|