@Component
Decorator1.1 Objectif du @Component
Decorator
Lors de la déclaration d'un composant, le décorateur @Component doit être utilisé sur la classe du composant pour indiquer à Angular qu'il s'agit d'un composant. [Recommandation de didacticiel associée : "tutoriel angulaire"]
import { Component, OnInit } from '@angular/core' ; @Composant({ sélecteur : 'app-product-alerts', templateUrl : './product-alerts.component.html', styleUrls : ['./product-alerts.component.css'] }) classe d'exportation ProductAlertsComponent implémente OnInit { constructeur() { } ngOnInit() { } }
1.2 Options communes du décorateur @Component
Le décorateur @Component
hérite de Directive
Ce sélecteur CSS est utilisé pour marquer la directive dans le modèle et déclencher l'instanciation de la directive.
1.2.1继承自@Directive装饰器的选项
type | description | selector |
---|---|---|
string | css | selector name, utilisé pour marquer la directive (composant) dans le modèle et déclencher ses |
entrées | d'instanciationstring[] | Angular mettra automatiquement à jour les propriétés d'entrée lors de la détection des changements. L'attribut inputs définit un ensemble d'éléments de configuration pointant de directiveProperty vers BindingProperty : · directiveProperty est utilisé pour spécifier la propriété dans la directive dans laquelle la valeur doit être écrite. · bindProperty est utilisé pour spécifier la propriété DOM à partir de laquelle la valeur doit être lue. Lorsque bindProperty n’est pas fourni, il est supposé être identique à directiveProperty. |
outputs | string[] | Un ensemble de propriétés de sortie pour la liaison d'événements. Lorsqu'une propriété de sortie émet un événement, un gestionnaire dans le modèle attaché à l'événement est appelé. Chaque propriété de sortie mappe directiveProperty à bindProperty : · directiveProperty spécifie la propriété du composant pour émettre l'événement. · bindProperty spécifie l'attribut HTML auquel le gestionnaire d'événements doit être attaché. |
Provider | [] | Une collection de fournisseurs de services |
exportAs | string | Un ou plusieurs noms qui peuvent être utilisés pour attribuer cette directive à une variable dans le modèle. Lorsqu'il y a plusieurs noms, séparez-les par des virgules. |
queries | {[key:string]:any} | configure certaines requêtes qui seront injectées dans cette directive. La requête de contenu est définie avant d'appeler le rappel ngAfterContentInit. La requête de vue sera définie avant d'appeler le rappel ngAfterViewInit. |
jit | true | Si vrai, l'instruction/le composant sera ignoré par le compilateur AOT, il sera donc toujours compilé JIT. Cette option est destinée à prendre en charge les futurs compilateurs Ivy et n'a pas encore d'effet. |
l'hôte | {[key:string]:string} | utilise un ensemble de paires clé-valeur pour mapper les propriétés de classe aux liaisons d'éléments hôtes (propriétés, attributs et événements). Angular vérifie automatiquement les liaisons de propriété hôte lors de la détection des modifications. Si la valeur liée change, Angular met à jour l'élément hôte de la directive. Lorsque la clé est une propriété de l'élément hôte, la valeur de la propriété sera propagée à l'attribut DOM spécifié. Lorsque la clé est un attribut statique dans le DOM, la valeur de l'attribut sera propagée à la propriété spécifiée sur l'élément hôte. Pour la gestion des événements : · Sa clé est l'événement DOM que l'instruction veut écouter. Pour écouter un événement global, ajoutez la cible que vous souhaitez écouter devant le nom de l'événement. La cible peut être une fenêtre, un document ou un corps. · Sa valeur est l'instruction à exécuter lorsque l'événement se produit. Si cette instruction renvoie false, la fonction PreventDefault de cet événement DOM sera appelée. La variable locale $event peut être référencée dans cette instruction pour obtenir des données d'événement. |
1.2.2 @Component自己特有的选项
Description | du type | d'option | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | Lorsque le composant est instancié, Angular créera un détecteur de changement, qui est responsable de la propagation des modifications dans chaque valeur de liaison du composant. La politique est l'une des valeurs suivantes : · ChangeDetectionStrategy#OnPush(0) définit la stratégie sur CheckOnce (sur demande). · ChangeDetectionStrategy#Default(1) définit la stratégie sur CheckAlways. | |
viewProviders | Provider[] | définit un ensemble d'objets injectables disponibles dans chaque nœud enfant de la vue. | |
La chaîne | moduleId | contient l'ID du module qui contient le composant. Le composant doit être capable de résoudre les URL relatives utilisées dans les modèles et les feuilles de style. SystemJS exporte la variable __moduleName dans chaque module. Dans CommonJS, cela peut être défini sur module.id. | |
templateUrl | stringL'URL | du fichier modèle de composant. S'il est fourni, n'utilisez pas de modèle pour fournir des modèles en ligne. | |
Le modèle en ligne du | composantde chaîne | de modèle | .S'il est fourni, n'utilisez pas templateUrl pour fournir le modèle. |
styleUrls | string[] | Une ou plusieurs URL, pointant vers le fichier contenant la feuille de style CSS de ce composant. | |
styles | string[] | Un ou plusieurs styles CSS en ligne utilisés par ce composant. | |
animations | any[] | Un ou plusieurs appels d'animation trigger(), contenant des définitions state() et transition(). | |
encapsulation | ViewEncapsulation | est une stratégie d'encapsulation de style utilisée par les modèles et les styles CSS. Les valeurs sont : · ViewEncapsulation.ShadowDom : utilisez Shadow DOM. Il ne fonctionne que sur les plates-formes prenant en charge nativement Shadow DOM. · ViewEncapsulation.Emulated : Utilisez le CSS calé pour émuler le comportement natif. · ViewEncapsulation.None : utilisez le CSS global sans aucune encapsulation. Si elle n’est pas fournie, la valeur est obtenue à partir de CompilerOptions. L'option par défaut du compilateur est ViewEncapsulation.Emulated. Si la stratégie est définie sur ViewEncapsulation.Emulated et que le composant ne spécifie pas de styles ou de styleUrls, il passera automatiquement à ViewEncapsulation.None. | |
l'interpolation | [string, string] | remplace les délimiteurs de début et de fin par défaut des expressions d'interpolation ({ { et }}) | |
EntryComponents | Array<Type | any[]> | |
PreserveWhitespaces | boolean | Si vrai, il est conservé, si faux, les éventuels caractères d'espacement supplémentaires sont supprimés du modèle compilé. Les caractères d'espacement sont les caractères qui correspondent à s dans les expressions régulières JavaScript. La valeur par défaut est false sauf si elle est remplacée via les options du compilateur. |
selector
peut utiliser l'une des formes suivantes :
element-name
: sélectionnez[attribute]
en fonction du nom de l'élément : sélectionnez.class
en fonction du nom de l'attribut : sélectionnez [attribut=valeur] en fonction du nom de la classenot(sub_selector)
: sélectionnez selector1, selector2 uniquement lorsque l'élément ne correspond pas au sous-sélecteur sub_selectorselector1, selector2
2.1 est sélectionné, que le selector1 ou le selector2 corresponde element-name
: select
@Component({ sélecteur : 'app-element', modèle : './element.component.html', styleUrls : ['./element.component.css'] })
<app-element></app-element>
2.2 [attribute]
: Sélectionnez
@Component({ sélecteur : '[app-element]', modèle : './element.component.html', styleUrls : ['./element.component.css'] })
<div app-element></div>
2.3 .class
: Sélectionnez
@Component({ sélecteur : '.app-element', modèle : './element.component.html', styleUrls : ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
utilise un ensemble de paires clé-valeur pour mapper les propriétés de la classe à la liaison de l'hôte élément (Propriété, Attributs et événements).
Angular vérifie automatiquement les liaisons de propriété hôte lors de la détection des modifications. Si la valeur liée change, Angular met à jour l'élément hôte de la directive.
pour le traitement des événements :
3.1 attribute
et property
Similitudes et différences :
Par conséquent,双向
dans dom 的property
est implémentée. dom 的property
, donc l'instruction est liée à la propriété, mais dans certains cas, le dom n'existe pas. Propriété telle que colspan, rowspan, etc. Si vous souhaitez lier les propriétés de la balise html, vous devez utiliser attr
:
<table. width="100%" border="10px solid"> <tr> <th>Mois</th> <th>Économies</th> </tr> <tr> <td [attr.colspan]=colnum>Janvier</td> </tr> <tr> <td [attr.colspan]=colnum>Février</td> </tr> </table> let colnum:number = 2;
3.2 Utiliser host
pour lier class
@Component({ sélecteur : '.app-element', modèle : './element.component.html', styleUrls : ['./element.component.css'], hôte: { '[class.default-class]' : 'useDefault' }, encapsulation : ViewEncapsulation.None // Laissez l'élément hôte utiliser également le style element.component.css. Sinon, des capsules sont utilisées par défaut pour éviter la pollution CSS. }) classe d'exportation AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 Utiliser style
de liaison host
@Component({ sélecteur : '.app-element', modèle : './element.component.html', styleUrls : ['./element.component.css'], hôte: { '[style.background]' : 'inputBackground' } }) classe d'exportation AppElementComponent { @Input() inputBackground = 'rouge'; }
<div class="app-element"></div>
3.4 Utiliser host
pour lier les événements
@Component({ sélecteur : '.app-element', modèle : './element.component.html', styleUrls : ['./element.component.css'], hôte: { '(clic)' : 'onClick($événement)' } }) classe d'exportation AppElementComponent { public onClick ($ événement) { console.log($événement); } }
<div class="app-element"></div>
encapsulation
(encapsulation)Stratégie d'encapsulation de style pour les modèles et les styles CSS.
4.1 Les composants Web
encapsulent un composant de manière standardisée et non intrusive. Chaque composant peut organiser sa propre structure HTML, son style CSS et son code JavaScript sans不会干扰
les autres éléments de la page.
Les composants Web se composent des quatre technologies suivantes :
4.2 Shadow DOM
<!DOCTYPE html> <html> <tête> <méta charset="UTF-8"> <titre>Shadow DOM</title> <style type="text/css"> .shadowroot_son { couleur : #f00 ; } </style> </tête> <corps> <p>Je ne suis pas dans Shadow Host</p> <div>Bonjour tout le monde !</div> <script> // hôte fantôme var shadowHost = document.querySelector('.shadowhost'); // Créer une racine fantôme (racine fantôme) var shadowRoot = shadowHost.createShadowRoot(); // La racine fantôme est le premier nœud de l'arbre fantôme, et d'autres nœuds tels que le nœud p sont ses nœuds enfants. shadowRoot.innerHTML = '<p>Je suis dans Shadow Host</p>'; </script> </corps> <html>
4.3 ViewEncapsulation
ViewEncapsulation permet de définir trois valeurs facultatives :
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core' ; @Composant({ sélecteur : 'mon-application', modèle : ` <h4>Bienvenue dans le monde angulaire</h4> <p class="greet">Bonjour {{name}}</p> ', styles : [` .saluer { arrière-plan : #369 ; couleur : blanc ; } `], encapsulation : ViewEncapsulation.None // Aucun émulé | ShadowDom }) classe d'exportation AppComponent { nom : chaîne = 'Semlinker' ; }
Le résultat de la définition de ViewEncapsulation.None
est qu'il n'y a pas Shadow DOM
et que tous les styles sont appliqués à整个
document
. En d'autres termes, le style du composant受外界影响
et peut être覆盖
.
4.3.2 ViewEncapsulation.Emulated
import { Component, ViewEncapsulation } depuis '@angular/core' ; @Composant({ sélecteur : 'mon-application', ..., encapsulation : ViewEncapsulation.Emulated // Aucun Emulated | ShadowDom }) classe d'exportation AppComponent { nom : chaîne = 'Semlinker' ; }
Le résultat du paramètre ViewEncapsulation.Emulated
est qu'il n'y a pas Shadow DOM
, mais le composant est encapsulé via样式包装机制
fourni par Angular
afin que le style du composant不受外部影响
. Bien que le style soit toujours appliqué à整个document
, Angular crée un sélecteur [_ngcontent-cmy-0]
pour la classe .greet
. On voit que为组件定义的样式,被Angular 修改了
. Parmi eux, _nghost-cmy- 和_ngcontent-cmy-
sont utilisés pour实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
import { Component, ViewEncapsulation } depuis '@angular/core' ; @Composant({ sélecteur : 'mon-application', ..., encapsulation : ViewEncapsulation.ShadowDom // Aucun émulé | ShadowDom }) classe d'exportation AppComponent { nom : chaîne = 'Semlinker' ; }
Le résultat du paramètre ViewEncapsulation.ShadowDom
est d'utiliser la fonctionnalité native Shadow DOM
. Angular Shadow DOM 形式渲染
pris en charge par le navigateur.