Component ist eine Unterklasse von Directive. Es handelt sich um einen Dekorator, der verwendet wird, um eine Klasse alsAngular-Komponente zu kennzeichnen. Der folgende Artikel vermittelt Ihnen ein detailliertes Verständnis des @Component-Dekorators in Angular. Ich hoffe, er wird Ihnen hilfreich sein.
@Component
Decorator@Component
装饰器1.1@Component
装饰器的用途
声明一个组件时,在组件类的之上要用@Component装饰器来告知Angular这是一个组件。【相关教程推荐:《angular教程》】
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-product-alerts', templateUrl: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) export class ProductAlertsComponent implements OnInit { constructor() { } ngOnInit() { } }
1.2@Component
装饰器的常用选项
@Component
装饰器继承于Directive
,这个css选择器用于在模板中标记出该指令,并触发该指令的实例化。
1.2.1继承自@Directive装饰器的选项
@Component
Zweck des Dekorators
@Component
Direktive
1.2.2@Component自己特有的选项
Angular Tutorial | “]
@Component({ selector: 'app-element', template: './element.component.html', styleUrls: ['./element.component.css'] })
Nach dem Login kopieren
Nach dem Login kopieren
|
1.2 @Component Allgemeine Optionen für Dekoratoren |
---|---|---|
inputs | string[] | Angular aktualisiert die Eingabeeigenschaften automatisch während der Änderungserkennung. Das Eingabeattribut definiert eine Reihe von Konfigurationselementen, die von DirectiveProperty auf BindingProperty verweisen: |
outputs | 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:
|
provides | Provider[] | Eine Sammlung von Dienstanbietern
|
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. |
Abfragen | {[key:string]:any} | Konfigurieren Sie 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 Direktive/Komponente vom AOT-Compiler ignoriert und daher nur JIT-kompiliert. Diese Option dient der Unterstützung zukünftiger Ivy-Compiler und hat noch keine Auswirkung. |
host | {[key:string]:string} | Ordnen Sie mithilfe einer Reihe von Schlüssel-Wert-Paaren die Eigenschaften der Klasse den Bindungen des Host-Elements (Eigenschaft, Attribut und Ereignis) zu. Angular überprüft automatisch die Host-Eigenschaftsbindungen während der Änderungserkennung. Wenn sich der gebundene Wert ändert, aktualisiert Angular das Hostelement der Direktive. Wenn key 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 Ereignisverarbeitung: |
Optionen | Typ | Beschreibung |
---|---|---|
changeDetection | ChangeDetectionStrategy | Nachdem die Komponente instanziiert wurde Angular erstellt einen Änderungsdetektor, der für die Weitergabe von Komponentenänderungen verantwortlich ist in individuellen verbindlichen Werten. Die Strategie ist einer der folgenden Werte: · ChangeDetectionStrategy#OnPush(0) Setzt die Strategie auf CheckOnce (auf Anfrage). · ChangeDetectionStrategy#Default(1) Setzen Sie die Strategie auf CheckAlways. |
viewProviders | Provider[] | Definiert einen Satz injizierbarer Objekte, die in verschiedenen untergeordneten Knoten der Ansicht verfügbar sind. |
moduleId | string | Die ID des Moduls, das diese 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 jedes Modul. In CommonJS kann dies auf module.id gesetzt werden. |
templateUrl | string | Die URL der Komponentenvorlagendatei. Wenn es bereitgestellt wird, verwenden Sie template nicht, um Inline-Vorlagen bereitzustellen. |
template | string | Inline-Vorlage für Komponenten. 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, einschließlich einiger State()- und Transition()-Definitionen. |
encapsulation | ViewEncapsulation | Style-Kapselungsstrategie für Vorlagen und CSS-Stile. Werte sind: · ViewEncapsulation.ShadowDom: Shadow DOM verwenden. 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 bezogen. 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 | [Zeichenfolge, Zeichenfolge] | Überschreiben Sie die standardmäßigen Start- und Endtrennzeichen des Interpolationsausdrucks ({ { und }}) |
entryComponents | Array
|
any[]> |
preserveWhitespaces | 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
选择器可使用下列形式之一:
element-name
: 根据元素名选取[attribute]
: 根据属性名选取.class
: 根据类名选取[attribute=value]
: 根据属性名和属性值选取not(sub_selector)
: 只有当元素不匹配子选择器 sub_selector 的时候才选取selector1, selector2
: 无论 selector1 还是 selector2 匹配时都选取2.1element-name
: 根据元素名选取
@Component({ selector: 'app-element', template: './element.component.html', styleUrls: ['./element.component.css'] })
2.2[attribute]
: 根据属性名选取
@Component({ selector: '[app-element]', template: './element.component.html', styleUrls: ['./element.component.css'] })
2.3.class
: 根据类名选取
@Component({ selector: '.app-element', template: './element.component.html', styleUrls: ['./element.component.css'] })
host
:{[key:string]:string}
使用一组键-值对,把类的属性映射到宿主元素的绑定(Property、Attribute 和事件)。
Angular 在变更检测期间会自动检查宿主 Property 绑定。 如果绑定的值发生了变化,Angular 就会更新该指令的宿主元素。
对于事件处理:
3.1attribute
和property
异同:
所以在 angular2 中双向
绑定实现是由dom 的 property
实现的,所以指令绑定的是 property ,但是在某些情况下 dom 不存在某个 property 比如 colspan,rowspan 等,这时想要绑定 html 标签特性需要用到attr
:
Month | Savings |
---|---|
January | |
February |
3.2 使用host
绑定class
@Component({ selector: '.app-element', template: './element.component.html', styleUrls: ['./element.component.css'], host: { '[class.default-class]': 'useDefault' }, encapsulation: ViewEncapsulation.None // 让宿主元素也用上 element.component.css 样式。否则,默认胶囊封装避免CSS污染。 }) export class AppElementComponent { @Input() useDefault = true; }
3.3 使用host
绑定style
@Component({ selector: '.app-element', template: './element.component.html', styleUrls: ['./element.component.css'], host: { '[style.background]': 'inputBackground' } }) export class AppElementComponent { @Input() inputBackground = 'red'; }
3.4 使用host
绑定事件
@Component({ selector: '.app-element', template: './element.component.html', styleUrls: ['./element.component.css'], host: { '(click)': 'onClick($event)' } }) export class AppElementComponent { public onClick($event) { console.log($event); } }
encapsulation
(封装)供模板和 CSS 样式使用的样式封装策略。
4.1 Web Components
通过一种标准化的非侵入的方式封装一个组件,每个组件能组织好它自身的 HTML 结构、CSS 样式、JavaScript 代码,并且不会干扰
页面上的其他元素。
Web Components 由以下四种技术组成:
4.2 Shadow DOM
4.3ViewEncapsulation
ViewEncapsulation 允许设置三个可选的值:
4.3.1ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'my-app', template: `Welcome to Angular World
Hello {{name}}
`, styles: [` .greet { background: #369; color: white; } `], encapsulation: ViewEncapsulation.None // None | Emulated | ShadowDom }) export class AppComponent { name: string = 'Semlinker'; }
ViewEncapsulation.None
设置的结果是没有Shadow DOM
,并且所有的样式都应用到整个
document
,换句话说,组件的样式会受外界影响
,可能被覆盖
掉。
4.3.2ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'my-app', ..., encapsulation: ViewEncapsulation.Emulated // None | Emulated | ShadowDom }) export class AppComponent { name: string = 'Semlinker'; }
ViewEncapsulation.Emulated
设置的结果是没有Shadow DOM
,但是通过Angular
提供的样式包装机制
来封装组件,使得组件的样式不受外部影响
。虽然样式仍然是应用到整个 document
,但 Angular 为.greet
类创建了一个[_ngcontent-cmy-0]
选择器。可以看出,我们为组件定义的样式,被 Angular 修改了
。其中的_nghost-cmy- 和 _ngcontent-cmy-
用来实现局部的样式
。
4.3.3ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'my-app', ..., encapsulation: ViewEncapsulation.ShadowDom // None | Emulated | ShadowDom }) export class AppComponent { name: string = 'Semlinker'; }
ViewEncapsulation.ShadowDom
设置的结果是使用原生的Shadow DOM
特性。Angular 会把组件按照浏览器支持的Shadow DOM 形式渲染
。
更多编程相关知识,请访问:编程视频!!
Das obige ist der detaillierte Inhalt vonTiefes Verständnis des @Component-Dekorators in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!