@Component
Decorator1.1 Zweck von @Component
Decorator
Beim Deklarieren einer Komponente muss der @Component Decorator für die Komponentenklasse verwendet werden, um Angular mitzuteilen, dass es sich um eine Komponente handelt. [Verwandte Tutorial-Empfehlung: „Angular Tutorial“]
import { Component, OnInit } from '@angular/core'; @Komponente({ Selektor: 'app-product-alerts', templateUrl: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) Die Exportklasse ProductAlertsComponent implementiert OnInit { Konstruktor() { } ngOnInit() { } }
1.2 Allgemeine Optionen von @Component
decorator
@Component
decorator erbt von Directive
Dieser CSS-Selektor wird verwendet, um die Direktive in der Vorlage zu markieren und die Instanziierung der Direktive auszulösen.
1.2.1继承自@Directive装饰器的选项
Beschreibung | des Optionstyps | , Selektorzeichenfolge |
---|---|---|
, | Namedes CSS- | Selektors, werden verwendet, um die Direktive (Komponente) in der Vorlage zu markieren und ihre Instanziierung auszulösen |
Eingaben | string[] | Angular aktualisiert die Eingabeeigenschaften automatisch während der Änderungserkennung. Das Attribut „inputs“ definiert eine Reihe von Konfigurationselementen, die von „directiveProperty“ auf „bindingProperty“ verweisen: · DirectiveProperty wird verwendet, um die Eigenschaft innerhalb der Direktive anzugeben, in die der Wert geschrieben werden soll. · bindingProperty wird verwendet, um die DOM-Eigenschaft anzugeben, aus der der Wert gelesen werden soll. Wenn bindingProperty nicht angegeben wird, wird davon ausgegangen, dass es mit DirectiveProperty identisch ist. |
Ausgaben | string[] | Eine Reihe von Ausgabeeigenschaften für die Ereignisbindung. Wenn eine Ausgabeeigenschaft ein Ereignis ausgibt, wird ein Handler in der dem Ereignis zugeordneten Vorlage aufgerufen. Jede Ausgabeeigenschaft ordnet „directiveProperty“ der „bindingProperty“ zu: · DirectiveProperty gibt die Komponenteneigenschaft zum Ausgeben des Ereignisses an. · bindingProperty gibt das HTML-Attribut an, an das der Event-Handler angehängt werden soll. |
stellt | Provider[] | Eine Sammlung von Dienstanbietern | bereit
exportAs | string | Ein oder mehrere Namen, die verwendet werden können, um diese Direktive einer Variablen in der Vorlage zuzuweisen. Wenn es mehrere Namen gibt, trennen Sie diese durch Kommas. |
querys | {[key:string]:any} | konfiguriert einige Abfragen, die in diese Direktive eingefügt werden. Die Inhaltsabfrage wird vor dem Aufruf des ngAfterContentInit-Rückrufs festgelegt. Die Ansichtsabfrage wird vor dem Aufruf des ngAfterViewInit-Rückrufs festgelegt. |
jit | true | Wenn true, wird die Anweisung/Komponente vom AOT-Compiler ignoriert, sodass sie immer JIT-kompiliert wird. Diese Option dient der Unterstützung zukünftiger Ivy-Compiler und hat noch keine Auswirkung. |
Host | {[key:string]:string} | verwendet eine Reihe von Schlüssel-Wert-Paaren, um Klasseneigenschaften Hostelementbindungen (Eigenschaften, Attribute und Ereignisse) zuzuordnen. Angular überprüft automatisch die Host-Eigenschaftsbindungen während der Änderungserkennung. Wenn sich der gebundene Wert ändert, aktualisiert Angular das Hostelement der Direktive. Wenn der Schlüssel eine Eigenschaft des Hostelements ist, wird der Eigenschaftswert an das angegebene DOM-Attribut weitergegeben. Wenn der Schlüssel ein statisches Attribut im DOM ist, wird der Attributwert an die im Hostelement angegebene Eigenschaft weitergegeben. Für die Ereignisbearbeitung: · Sein Schlüssel ist das DOM-Ereignis, auf das die Anweisung hören möchte. Um ein globales Ereignis abzuhören, fügen Sie das Ziel, das Sie abhören möchten, vor dem Ereignisnamen hinzu. Das Ziel kann ein Fenster, ein Dokument oder ein Textkörper sein. · Sein Wert ist die Anweisung, die ausgeführt werden soll, wenn das Ereignis eintritt. Wenn diese Anweisung „false“ zurückgibt, wird die Funktion „preventDefault“ dieses DOM-Ereignisses aufgerufen. In dieser Anweisung kann auf die lokale Variable $event verwiesen werden, um Ereignisdaten abzurufen. |
1.2.2 @Component自己特有的选项
Beschreibung | des | Optionstyps | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | Wenn die Komponente instanziiert wird, erstellt Angular einen Änderungsdetektor, der für die Weitergabe von Änderungen in jedem Bindungswert der Komponente verantwortlich ist. Die Richtlinie ist einer der folgenden Werte: · ChangeDetectionStrategy#OnPush(0) setzt die Strategie auf CheckOnce (auf Anfrage). · ChangeDetectionStrategy#Default(1) setzt die Strategie auf CheckAlways. | |
viewProviders | Provider[] | definiert eine Reihe injizierbarer Objekte, die in jedem untergeordneten Knoten der Ansicht verfügbar sind. | |
Die Modul-ID- | Zeichenfolge | enthält die ID des Moduls, das die Komponente enthält. Die Komponente muss in der Lage sein, relative URLs aufzulösen, die in Vorlagen und Stylesheets verwendet werden. SystemJS exportiert die Variable __moduleName in jedem Modul. In CommonJS kann dies auf module.id gesetzt werden. | |
templateUrl | stringDie | URL der Komponentenvorlagendatei. Wenn es bereitgestellt wird, verwenden Sie template nicht, um Inline-Vorlagen bereitzustellen. | |
Inline | -Vorlage der | Vorlagenzeichenfolgenkomponente | .Wenn es bereitgestellt wird, verwenden Sie templateUrl nicht, um die Vorlage bereitzustellen. |
styleUrls | string[] | Eine oder mehrere URLs, die auf die Datei verweisen, die das CSS-Stylesheet dieser Komponente enthält. | |
Styles | string[] | Ein oder mehrere Inline-CSS-Stile, die von dieser Komponente verwendet werden. | |
Animationen | Any[] | Ein oder mehrere Animations-Trigger()-Aufrufe, die einige State()- und Transition()-Definitionen enthalten. | |
Kapselung | ViewEncapsulation | ist eine Stilkapselungsstrategie, die von Vorlagen und CSS-Stilen verwendet wird. Die Werte sind: · ViewEncapsulation.ShadowDom: Verwenden Sie Shadow DOM. Es funktioniert nur auf Plattformen, die Shadow DOM nativ unterstützen. · ViewEncapsulation.Emulated: Verwenden Sie angepasstes CSS, um natives Verhalten zu emulieren. · ViewEncapsulation.None: Globales CSS ohne Kapselung verwenden. Wenn nicht angegeben, wird der Wert von CompilerOptions abgerufen. Die Standard-Compileroption ist ViewEncapsulation.Emulated. Wenn die Richtlinie auf ViewEncapsulation.Emulated festgelegt ist und die Komponente keine Stile oder styleUrls angibt, wechselt sie automatisch zu ViewEncapsulation.None. | |
interpolation | [string, string] | überschreibt die standardmäßigen Start- und Endtrennzeichen von Interpolationsausdrücken ({ { und }}) | |
enterComponents | Array<Type | any[]> | |
retainWhitespaces | boolean | Wenn „true“, wird es beibehalten, wenn „false“, werden mögliche zusätzliche Leerzeichen aus der kompilierten Vorlage entfernt. Leerzeichen sind die Zeichen, die mit s in regulären JavaScript-Ausdrücken übereinstimmen. Der Standardwert ist „false“, sofern er nicht über Compiler-Optionen überschrieben wird. |
selector
Selektorkann eine der folgenden Formen verwenden:
element-name
: Wählen Sie[attribute]
basierend auf dem Elementnamen aus: Wählen Sie.class
basierend auf dem Attributnamen aus: Wählen Sie [Attribut=Wert] basierend auf dem Klassennamen ausnot(sub_selector)
: Wählen Sie Selector1 und Selector2 nur aus, wenn das Element nicht mit dem Subselektor übereinstimmt. Sub_selectorselector1, selector2
2.1 wird ausgewählt, unabhängig davon, ob Selector1 oder Selector2 mit element-name
übereinstimmt : Wählen Sie
@Component({ Selektor: 'App-Element', Vorlage: './element.component.html', styleUrls: ['./element.component.css'] })
<app-element></app-element>
2.2 [attribute]
: Wählen Sie
@Component({ Selektor: '[App-Element]', Vorlage: './element.component.html', styleUrls: ['./element.component.css'] })
<div app-element></div>
2.3 .class
: Wählen Sie
@Component({ Selektor: '.app-element', Vorlage: './element.component.html', styleUrls: ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
verwendet eine Reihe von Schlüssel-Wert-Paaren, um die Eigenschaften der Klasse der Bindung des Hosts zuzuordnen Element (Eigenschaft, Attribute und Ereignisse).
Angular überprüft automatisch die Host-Eigenschaftsbindungen während der Änderungserkennung. Wenn sich der gebundene Wert ändert, aktualisiert Angular das Hostelement der Direktive.
für die Ereignisverarbeitung definiert werden:
3.1 attribute
und property
Ähnlichkeiten und Unterschiede:
双向
dom 的property
, sodass die Anweisung an die Eigenschaft gebunden ist, aber in einigen Fällen ist die Dom-Eigenschaft nicht vorhanden, z. B. Colspan, Rowspan usw. Wenn Sie HTML-Tag-Eigenschaften binden möchten, müssen Sie attr
:
<tableverwenden
width="100%" border="10px solid"> <tr> <th>Monat</th> <th>Einsparungen</th> </tr> <tr> <td [attr.colspan]=colnum>Januar</td> </tr> <tr> <td [attr.colspan]=colnum>Februar</td> </tr> </table> let colnum:number = 2;
3.2 Verwenden Sie host
, um class
@Component({ Selektor: '.app-element', Vorlage: './element.component.html', styleUrls: ['./element.component.css'], Gastgeber: { '[class.default-class]': 'useDefault' }, Kapselung: ViewEncapsulation.None // Lassen Sie das Host-Element auch den Stil element.component.css verwenden. Ansonsten werden standardmäßig Kapseln verwendet, um eine CSS-Belastung zu vermeiden. }) Exportklasse AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 Verwenden Sie style
host
Bindungsstil
@Component({ Selektor: '.app-element', Vorlage: './element.component.html', styleUrls: ['./element.component.css'], Gastgeber: { '[style.background]': 'inputBackground' } }) Exportklasse AppElementComponent { @Input() inputBackground = 'red'; }
<div class="app-element"></div>
3.4 Verwenden Sie host
, um Ereignisse zu binden
@Component({ Selektor: '.app-element', Vorlage: './element.component.html', styleUrls: ['./element.component.css'], Gastgeber: { '(click)': 'onClick($event)' } }) Exportklasse AppElementComponent { public onClick($event) { console.log($event); } }
<div class="app-element"></div>
encapsulation
(encapsulation)Stilkapselungsstrategie für Vorlagen und CSS-Stile.
4.1 Webkomponenten
kapseln eine Komponente auf standardisierte und nicht aufdringliche Weise. Jede Komponente kann ihre eigene HTML-Struktur, ihren eigenen CSS-Stil und ihren eigenen JavaScript-Code organisieren, ohne andere Elemente auf der Seite不会干扰
.
Web Components besteht aus den folgenden vier Technologien:
4.2 Shadow DOM
<!DOCTYPE html> <html> <Kopf> <meta charset="UTF-8"> <title>Shadow DOM</title> <style type="text/css"> .shadowroot_son { Farbe: #f00; } </style> </head> <Körper> <p>Ich bin nicht in Shadow Host</p> <div>Hallo Welt!</div> <Skript> // Schattenhost varshadowHost = document.querySelector('.shadowhost'); // Schattenwurzel erstellen (Schattenwurzel) varshadowRoot =shadowHost.createShadowRoot(); // Die Schattenwurzel ist der erste Knoten des Schattenbaums, und andere Knoten wie der p-Knoten sind seine untergeordneten Knoten. shadowRoot.innerHTML = '<p>Ich bin im Shadow Host</p>'; </script> </body> <html>
4.3 ViewEncapsulation
ViewEncapsulation ermöglicht das Festlegen von drei optionalen Werten:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @Komponente({ Selektor: 'meine-App', Vorlage: ` <h4>Willkommen bei Angular World</h4> <p class="greet">Hallo {{name}}</p> `, Stile: [` .greet { Hintergrund: #369; Farbe: weiß; } `], Kapselung: ViewEncapsulation.None // None | }) Exportklasse AppComponent { Name: string = 'Semlinker'; }
Das Ergebnis der Einstellung „ ViewEncapsulation.None
ist, dass kein Shadow DOM
vorhanden ist und alle Stile auf整个
document
angewendet werden. Mit anderen Worten: Der Stil der Komponente wird受外界影响
und kann覆盖
werden.
4.3.2 ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } from '@angular/core'; @Komponente({ Selektor: 'meine-App', ..., Kapselung: ViewEncapsulation.Emulated // None | }) Exportklasse AppComponent { Name: string = 'Semlinker'; }
Das Ergebnis der Einstellung „ ViewEncapsulation.Emulated
ist, dass kein Shadow DOM
vorhanden ist, die Komponente jedoch durch den von Angular
bereitgestellten样式包装机制
gekapselt wird, sodass der Stil der Komponente不受外部影响
. Obwohl der Stil weiterhin auf整个document
angewendet wird, erstellt Angular einen [_ngcontent-cmy-0]
-Selektor für die .greet
Klasse. Es ist ersichtlich, dass为组件定义的样式,被Angular 修改了
. Unter diesen werden _nghost-cmy- 和_ngcontent-cmy-
zur实现局部的样式
verwendet.
4.3.3 ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } from '@angular/core'; @Komponente({ Selektor: 'meine-App', ..., Kapselung: ViewEncapsulation.ShadowDom // Keine | Emuliert | }) Exportklasse AppComponent { Name: string = 'Semlinker'; }
Das Ergebnis der ViewEncapsulation.ShadowDom
-Einstellung ist die Verwendung der nativen Shadow DOM
Funktion. Angular Shadow DOM 形式渲染
.