
@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, selector22.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 形式渲染.