@Component
Decorator1.1 Propósito del @Component
Decorator
Al declarar un componente, el decorador @Component debe usarse en la clase de componente para indicarle a Angular que se trata de un componente. [Recomendación de tutorial relacionado: "tutorial angular"]
import {Component, OnInit} from '@angular/core'; @Componente({ selector: 'alertas-producto-aplicación', URL de plantilla: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) clase de exportación ProductAlertsComponent implementa OnInit { constructor() { } ngOnInit() { } }
1.2 Opciones comunes del decorador @Component
El decorador @Component
hereda de Directive
. Este selector CSS se utiliza para marcar la directiva en la plantilla y activar la creación de instancias de la directiva.
1.2.1继承自@Directive装饰器的选项
tipo | descripción | selector |
---|---|---|
cadena | css | nombre del selector, usado para marcar la directiva (componente) en la plantilla y activar su instanciación |
entradas | cadena[] | Angular actualizará automáticamente las propiedades de entrada durante la detección de cambios. El atributo de entradas define un conjunto de elementos de configuración que apuntan desde la propiedad directiva a la propiedad vinculante: · directProperty se utiliza para especificar la propiedad dentro de la directiva en la que se escribirá el valor. · BindingProperty se utiliza para especificar la propiedad DOM desde la cual se leerá el valor. Cuando no se proporciona vinculanteProperty, se supone que es lo mismo que directivaProperty. |
cadena | de salida | []Un conjunto de propiedades de salida para el enlace de eventos. Cuando una propiedad de salida emite un evento, se llama a un controlador en la plantilla adjunta al evento. Cada propiedad de salida asigna la propiedad directiva a la propiedad vinculante: · directProperty especifica la propiedad del componente para emitir el evento. · BindingProperty especifica el atributo HTML al que se adjuntará el controlador de eventos. |
proporciona | Proveedor[] | Una colección de proveedores de servicios |
exportAs | string | Uno o más nombres que se pueden usar para asignar esta directiva a una variable en la plantilla. Cuando haya varios nombres, sepárelos con comas. |
queries | {[key:string]:any} | configura algunas consultas que se inyectarán en esta directiva. La consulta de contenido se establece antes de llamar a la devolución de llamada ngAfterContentInit. La consulta de vista se configurará antes de llamar a la devolución de llamada ngAfterViewInit. |
jit | true | Si es verdadero, el compilador AOT ignorará la instrucción/componente, por lo que siempre se compilará JIT. Esta opción es para admitir futuros compiladores de Ivy y aún no tiene ningún efecto. |
host | {[key:string]:string} | utiliza un conjunto de pares clave-valor para asignar propiedades de clase a enlaces de elementos del host (Propiedades, Atributos y eventos). Angular verifica automáticamente los enlaces de propiedades del host durante la detección de cambios. Si el valor vinculado cambia, Angular actualiza el elemento host de la directiva. Cuando la clave es una propiedad del elemento host, el valor de la propiedad se propagará al atributo DOM especificado. Cuando la clave es un atributo estático en el DOM, el valor del atributo se propagará a la propiedad especificada en el elemento host. Para manejo de eventos: · Su clave es el evento DOM que la instrucción quiere escuchar. Para escuchar un evento global, agregue el destino que desea escuchar delante del nombre del evento. El destino puede ser una ventana, un documento o un cuerpo. · Su valor es la sentencia que se ejecutará cuando ocurra el evento. Si esta declaración devuelve falso, se llamará a la función preventDefault de este evento DOM. Se puede hacer referencia a la variable local $event en esta declaración para obtener datos del evento. |
1.2.2 @Component自己特有的选项
Tipo | de opción | descripción | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | Cuando se crea una instancia del componente, Angular creará un detector de cambios, que es responsable de propagar los cambios en cada valor de enlace del componente. La política es uno de los siguientes valores: · ChangeDetectionStrategy#OnPush(0) establece la estrategia en CheckOnce (bajo demanda). · ChangeDetectionStrategy#Default(1) establece la estrategia en CheckAlways. | |
viewProviders | Provider[] | define un conjunto de objetos inyectables que están disponibles en cada nodo secundario de la vista. | |
La cadena | moduleId | contiene el ID del módulo que contiene el componente. El componente debe poder resolver las URL relativas utilizadas en plantillas y hojas de estilo. SystemJS exporta la variable __moduleName en cada módulo. En CommonJS, esto se puede configurar en module.id. | |
templateUrl | stringLa | URL del archivo de plantilla del componente. Si se proporciona, no utilice la plantilla para proporcionar plantillas en línea. | |
La plantilla en línea del | componentede cadena | de plantilla | .Si se proporciona, no utilice templateUrl para proporcionar la plantilla. |
styleUrls | string[] | Una o más URL que apuntan al archivo que contiene la hoja de estilos CSS de este componente. | |
de estilos | [] | Uno o más estilos CSS en línea utilizados por este componente. | |
animaciones | any[] | Una o más llamadas de activación de animación(), que contienen algunas definiciones de estado() y transición(). | |
encapsulación | ViewEncapsulation | es una estrategia de encapsulación de estilos utilizada por plantillas y estilos CSS. Los valores son: · ViewEncapsulation.ShadowDom: utiliza Shadow DOM. Sólo funciona en plataformas que soportan de forma nativa Shadow DOM. · ViewEncapsulation.Emulated: utiliza CSS mejorado para emular el comportamiento nativo. · ViewEncapsulation.None: utiliza CSS global sin ningún tipo de encapsulación. Si no se proporciona, el valor se obtiene de CompilerOptions. La opción predeterminada del compilador es ViewEncapsulation.Emulated. Si la política está configurada en ViewEncapsulation.Emulated y el componente no especifica estilos o styleUrls, cambiará automáticamente a ViewEncapsulation.None. | |
La interpolación | [cadena, cadena] | anula los delimitadores de inicio y fin predeterminados de las expresiones de interpolación ({ { y }}) | |
EntryComponents | Array<Type | any[]> | |
preserveWhitespaces | boolean | Si es verdadero, se retiene; si es falso, los posibles espacios en blanco adicionales se eliminan de la plantilla compilada. Los espacios en blanco son aquellos caracteres que coinciden con s en expresiones regulares de JavaScript. El valor predeterminado es falso a menos que se anule mediante las opciones del compilador. |
selector
puede usar una de las siguientes formas:
element-name
: seleccione[attribute]
según el nombre del elemento: seleccione.class
según el nombre del atributo: seleccione [atributo = valor] según el nombre de la clasenot(sub_selector)
: seleccione selector1, selector2 solo cuando el elemento no coincida con el subselector sub_selectorselector1, selector2
2.1 se selecciona si el selector1 o el selector2 coinciden con element-name
: seleccione
@Component({ selector: 'elemento-aplicación', plantilla: './element.component.html', URL de estilo: ['./element.component.css'] })
<elemento-aplicación></elemento-aplicación>
2.2 [attribute]
: seleccione
@Component({ selector: '[elemento-aplicación]', plantilla: './element.component.html', URL de estilo: ['./element.component.css'] })
<div elemento-aplicación></div>
2.3 .class
: Seleccione
@Component({ selector: '.elemento-aplicación', plantilla: './element.component.html', URL de estilo: ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
usa un conjunto de pares clave-valor para asignar las propiedades de la clase al enlace del host elemento (Propiedad, Atributos y eventos).
Angular verifica automáticamente los enlaces de propiedades del host durante la detección de cambios. Si el valor vinculado cambia, Angular actualiza el elemento host de la directiva.
para el procesamiento de eventos:
3.1 attribute
y property
Similitudes y diferencias:
Por lo tanto, la implementación dom 的property
enlace双向
en angular2 es. dom 的property
, por lo que la instrucción está vinculada a la propiedad, pero en algunos casos el dom no existe Propiedad como colspan, rowspan, etc. Si desea vincular las propiedades de la etiqueta html, debe usar attr
:
<table ancho="100%" borde="10px sólido"> <tr> <th>Mes</th> <th>Ahorros</th> </tr> <tr> <td [attr.colspan]=colnum>Enero</td> </tr> <tr> <td [attr.colspan]=colnum>febrero</td> </tr> </tabla> let colnum:number = 2;
3.2 Usar host
para vincular class
@Component({ selector: '.elemento-aplicación', plantilla: './element.component.html', URL de estilo: ['./element.component.css'], anfitrión: { '[clase.clase-default]': 'useDefault' }, encapsulación: ViewEncapsulation.None // Deje que el elemento host también use el estilo element.component.css. De lo contrario, las cápsulas se utilizan de forma predeterminada para evitar la contaminación de CSS. }) exportar clase AppElementComponent { @Input() useDefault = verdadero; }
<div class="app-element"></div>
3.3 Usar style
de enlace host
@Component({ selector: '.elemento-aplicación', plantilla: './element.component.html', URL de estilo: ['./element.component.css'], anfitrión: { '[estilo.fondo]': 'entradaFondo' } }) exportar clase AppElementComponent { @Input() inputBackground = 'rojo'; }
<div class="app-element"></div>
3.4 Usar host
para vincular eventos
@Component({ selector: '.elemento-aplicación', plantilla: './element.component.html', URL de estilo: ['./element.component.css'], anfitrión: { '(clic)': 'onClick($evento)' } }) exportar clase AppElementComponent { público al hacer clic ($evento) { console.log($evento); } }
<div class="app-element"></div>
encapsulation
(encapsulación)Estrategia de encapsulación de estilos para plantillas y estilos CSS.
4.1 Los componentes web
encapsulan un componente de forma estandarizada y no intrusiva. Cada componente puede organizar su propia estructura HTML, estilo CSS y código JavaScript sin不会干扰
otros elementos de la página.
Los componentes web constan de las siguientes cuatro tecnologías:
4.2 Shadow DOM
<!DOCTYPE html> <html> <cabeza> <meta juego de caracteres="UTF-8"> <título>DOM en la sombra</título> <tipo de estilo="texto/css"> .shadowroot_son { color: #f00; } </estilo> </cabeza> <cuerpo> <p>No estoy en Shadow Host</p> <div>¡Hola mundo!</div> <guión> // host en la sombra var shadowHost = document.querySelector('.shadowhost'); // Crear raíz de sombra (raíz de sombra) var ShadowRoot = ShadowHost.createShadowRoot(); // La raíz de la sombra es el primer nodo del árbol de la sombra, y otros nodos como el nodo p son sus nodos secundarios. shadowRoot.innerHTML = '<p>Estoy en Shadow Host</p>'; </script> </cuerpo> <html>
4.3 ViewEncapsulation
ViewEncapsulation permite establecer tres valores opcionales:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @Componente({ selector: 'mi-aplicación', plantilla: ` <h4>Bienvenido al mundo angular</h4> <p class="greet">Hola {{name}}</p> `, estilos: [` .saludar { antecedentes: #369; color: blanco; } `], encapsulación: ViewEncapsulation.None // Ninguno | Emulado | }) exportar clase AppComponent { nombre: cadena = 'Semlinker'; }
El resultado de configurar ViewEncapsulation.None
es que no hay Shadow DOM
y todos los estilos se aplican a整个
document
. En otras palabras, el estilo del componente se受外界影响
y puede覆盖
.
4.3.2 ViewEncapsulation.Emulated
{Componente, ViewEncapsulation} de '@angular/core'; @Componente({ selector: 'mi-aplicación', ..., encapsulación: ViewEncapsulation.Emulated // Ninguno | ShadowDom }) exportar clase AppComponent { nombre: cadena = 'Semlinker'; }
El resultado de la configuración ViewEncapsulation.Emulated
es que no hay Shadow DOM
, pero el componente se encapsula a través样式包装机制
proporcionado por Angular
para que el estilo del componente不受外部影响
. Aunque el estilo todavía se aplica a整个document
, Angular crea un selector [_ngcontent-cmy-0]
para la clase .greet
. Se puede ver que为组件定义的样式,被Angular 修改了
. Entre ellos, _nghost-cmy- 和_ngcontent-cmy-
se utilizan para实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
import {Componente, ViewEncapsulation} desde '@angular/core'; @Componente({ selector: 'mi-aplicación', ..., encapsulación: ViewEncapsulation.ShadowDom // Ninguno | Emulado | }) exportar clase AppComponent { nombre: cadena = 'Semlinker'; }
El resultado de la configuración ViewEncapsulation.ShadowDom
es utilizar la característica nativa Shadow DOM
. Angular Shadow DOM 形式渲染
admitido por el navegador.