@Component
1.1 Objetivo do decorador @Component
Ao declarar um componente, o decorador @Component deve ser usado na classe do componente para informar ao Angular que este é um componente. [Recomendação do tutorial relacionado: "tutorial angular"]
import { Component, OnInit } from '@angular/core'; @Componente({ seletor: 'alertas de produto de aplicativo', templateUrl: './product-alerts.component.html', styleUrls: ['./product-alerts.component.css'] }) classe de exportação ProductAlertsComponent implementa OnInit { construtor() { } ngOnInit() { } }
1.2 Opções comuns do @Component
decorator
@Component
decorator herda da Directive
Este seletor css é usado para marcar a diretiva no template e acionar a instanciação da diretiva.
1.2.1继承自@Directive装饰器的选项
tipo | descrição | seletor | |
---|---|---|---|
string | nome do seletorcss | , usado para marcar a diretiva (componente) no template e acionar sua instanciação. | |
string[] | Angular atualizará automaticamente as propriedades de entrada durante a detecção de alterações | . | O atributo inputs define um conjunto de itens de configuração apontando de directivaProperty para vinculaçãoProperty: · directivaProperty é usada para especificar a propriedade dentro da diretiva na qual o valor deve ser escrito. · bindProperty é usado para especificar a propriedade DOM da qual o valor deve ser lido. Quando bindProperty não é fornecido, presume-se que seja igual a directivaProperty. |
outputs | string[] | Um conjunto de propriedades de saída para vinculação de eventos. Quando uma propriedade de saída emite um evento, um manipulador no modelo anexado ao evento é chamado. Cada propriedade de saída mapeia directivaProperty para bindingProperty: · directivaProperty especifica a propriedade do componente para emitir o evento. · bindProperty especifica o atributo HTML ao qual o manipulador de eventos será anexado. | |
fornece | Provider[] | Uma coleção de provedores de serviços | |
exportAs | string | Um ou mais nomes que podem ser usados para atribuir esta diretiva a uma variável no modelo. Quando houver vários nomes, separe-os com vírgulas. | |
queries | {[key:string]:any} | configura algumas consultas que serão injetadas nesta diretiva. A consulta de conteúdo é definida antes de chamar o retorno de chamada ngAfterContentInit. A consulta de visualização será definida antes de chamar o retorno de chamada ngAfterViewInit. | |
jit | verdadeiro | Se verdadeiro, a instrução/componente será ignorada pelo compilador AOT, portanto sempre será compilada JIT. Esta opção é para suportar futuros compiladores Ivy e ainda não tem efeito. | |
host | {[key:string]:string} | usa um conjunto de pares de valores-chave para mapear propriedades de classe para vinculações de elementos de host (propriedades, atributos e eventos). Angular verifica automaticamente as ligações de propriedades do host durante a detecção de alterações. Se o valor vinculado mudar, o Angular atualizará o elemento host da diretiva. Quando a chave é uma propriedade do elemento host, o valor da propriedade será propagado para o atributo DOM especificado. Quando a chave é um atributo estático no DOM, o valor do atributo será propagado para a propriedade especificada no elemento host. Para manipulação de eventos: · Sua chave é o evento DOM que a instrução deseja ouvir. Para ouvir um evento global, adicione o alvo que deseja ouvir antes do nome do evento. O destino pode ser janela, documento ou corpo. · Seu valor é a instrução a ser executada quando o evento ocorrer. Se esta instrução retornar falso, a função preventDefault deste evento DOM será chamada. A variável local $event pode ser referenciada nesta instrução para obter dados do evento. |
1.2.2 @Component自己特有的选项
Tipo de | opção | descrição | |
---|---|---|---|
changeDetection | ChangeDetectionStrategy | Quando o componente for instanciado, o Angular criará um detector de alterações, que é responsável por propagar as alterações em cada valor de ligação do componente. A política é um dos seguintes valores: · ChangeDetectionStrategy#OnPush(0) define a estratégia como CheckOnce (sob demanda). · ChangeDetectionStrategy#Default(1) define a estratégia como CheckAlways. | |
viewProviders | Provider[] | define um conjunto de objetos injetáveis que estão disponíveis em cada nó filho da string moduleId da visualização | |
que | contém | o ID do módulo que contém o componente. O componente deve ser capaz de resolver URLs relativos usados em modelos e folhas de estilo. SystemJS exporta a variável __moduleName em cada módulo. No CommonJS, isso pode ser definido como module.id. | |
templateUrl | stringO | URL do arquivo de modelo do componente. Se for fornecido, não use modelo para fornecer modelos embutidos. | |
O modelo embutido do | componentede string | do modelo | .Se for fornecido, não use templateUrl para fornecer o modelo. |
styleUrls | string[] | Uma ou mais URLs, apontando para o arquivo que contém a folha de estilos CSS deste componente. | |
estilos | string[] | Um ou mais estilos CSS embutidos usados por este componente. | |
animações | any[] | Uma ou mais chamadas de trigger() de animação, contendo algumas definições de estado() e transição(). | |
encapsulamento | ViewEncapsulation | é uma estratégia de encapsulamento de estilo usada por modelos e estilos CSS. Os valores são: · ViewEncapsulation.ShadowDom: Use Shadow DOM. Funciona apenas em plataformas que suportam nativamente Shadow DOM. · ViewEncapsulation.Emulated: Use CSS corrigido para emular o comportamento nativo. · ViewEncapsulation.None: Use CSS global sem qualquer encapsulamento. Se não for fornecido, o valor será obtido de CompilerOptions. A opção padrão do compilador é ViewEncapsulation.Emulated. Se a política estiver definida como ViewEncapsulation.Emulated e o componente não especificar estilos ou styleUrls, ele mudará automaticamente para ViewEncapsulation.None. | |
interpolação | [string, string] | substitui os delimitadores padrão de início e fim de expressões de interpolação ({ { e }}) | |
entryComponents | Array<Type | any[]> | |
preserveWhitespaces | boolean | Se verdadeiro, ele é retido; se for falso, possíveis caracteres de espaço em branco extras são removidos do modelo compilado. Caracteres de espaço em branco são aqueles caracteres que correspondem a s em expressões regulares JavaScript. O padrão é falso, a menos que seja substituído pelas opções do compilador. |
selector
pode usar um dos seguintes formatos:
element-name
: selecione[attribute]
com base no nome do elemento: selecione.class
com base no nome do atributo: selecione [atributo = valor] com base no nome da classenot(sub_selector)
: selecione selector1, selector2 somente quando o elemento não corresponder ao subseletor sub_selectorselector1, selector2
2.1 é selecionado se selector1 ou selector2 corresponder element-name
: selecione
@Component({ seletor: 'elemento do aplicativo', modelo: './element.component.html', styleUrls: ['./element.component.css'] })
<app-element></app-element>
2.2 [attribute]
: Selecione
@Component({ seletor: '[elemento do aplicativo]', modelo: './element.component.html', styleUrls: ['./element.component.css'] })
<div app-element></div>
2.3 .class
: Selecione
@Component({ seletor: '.app-element', modelo: './element.component.html', styleUrls: ['./element.component.css'] })
<div class="app-element"></div>
host
: {[key:string]:string}
usa um conjunto de pares de valores-chave para mapear as propriedades da classe para a ligação do host elemento (Propriedade, Atributos e eventos).
Angular verifica automaticamente as ligações de propriedades do host durante a detecção de alterações. Se o valor vinculado mudar, o Angular atualizará o elemento host da diretiva.
para processamento de eventos:
3.1 attribute
e property
Semelhanças e diferenças:
双向
dom 的property
dom 的property
, portanto a instrução está vinculada à propriedade, mas em alguns casos o dom não existe Propriedade como colspan, rowspan, etc. Se você deseja vincular as propriedades da tag html, você precisa usar attr
:
<table. largura="100%" borda="10px sólido"> <tr> <th>Mês</th> <th>Economia</th> </tr> <tr> <td [attr.colspan]=colnum>Janeiro</td> </tr> <tr> <td [attr.colspan]=colnum>Fevereiro</td> </tr> </tabela> deixe colnum:number = 2.2
Use host
para vincular class
@Component({ seletor: '.app-element', modelo: './element.component.html', styleUrls: ['./element.component.css'], hospedar: { '[class.default-class]': 'useDefault' }, encapsulation: ViewEncapsulation.None // Deixe o elemento Host também usar o estilo element.component.css. Caso contrário, as cápsulas são usadas por padrão para evitar a poluição do CSS. }) classe de exportação AppElementComponent { @Input() useDefault = true; }
<div class="app-element"></div>
3.3 Use style
de ligação host
@Component({ seletor: '.app-element', modelo: './element.component.html', styleUrls: ['./element.component.css'], hospedar: { '[estilo.background]': 'inputBackground' } }) classe de exportação AppElementComponent { @Input() inputBackground = 'vermelho'; }
<div class="app-element"></div>
3.4 Use host
para vincular eventos
@Component({ seletor: '.app-element', modelo: './element.component.html', styleUrls: ['./element.component.css'], hospedar: { '(clique)': 'onClick($evento)' } }) classe de exportação AppElementComponent { public onClick($evento) { console.log($evento); } }
<div class="app-element"></div>
encapsulation
(encapsulamento)Estratégia de encapsulamento de estilo para templates e estilos CSS.
4.1 Os componentes da Web
encapsulam um componente de maneira padronizada e não intrusiva. Cada componente pode organizar sua própria estrutura HTML, estilo CSS e código JavaScript sem不会干扰
outros elementos da página.
Os componentes da Web consistem nas quatro tecnologias a seguir:
4.2 Shadow DOM
<!DOCTYPE html> <html> <cabeça> <meta charset="UTF-8"> <title>Shadow DOM</title> <style type="texto/css"> .shadowroot_son { cor: #f00; } </estilo> </head> <corpo> <p>Não estou no Shadow Host</p> <div>Olá, mundo!</div> <roteiro> //host sombra var shadowHost = document.querySelector('.shadowhost'); // Cria raiz de sombra (raiz de sombra) var shadowRoot = shadowHost.createShadowRoot(); // A raiz sombra é o primeiro nó da árvore sombra, e outros nós, como o nó p, são seus nós filhos. shadowRoot.innerHTML = '<p>Estou no Shadow Host</p>'; </script> </body> <html>
4.3 ViewEncapsulation
ViewEncapsulation permite definir três valores opcionais:
4.3.1 ViewEncapsulation.None
import { Component, ViewEncapsulation } from '@angular/core'; @Componente({ seletor: 'meu-app', modelo: ` <h4>Bem-vindo ao mundo Angular</h4> <p class="greet">Olá {{name}}</p> `, estilos: [` .saudar { histórico: #369; cor: branco; } `], encapsulamento: ViewEncapsulation.None // Nenhum emulado | }) classe de exportação AppComponent { nome: string = 'Semlinker'; }
O resultado da configuração de ViewEncapsulation.None
é que não há Shadow DOM
e todos os estilos são aplicados a整个
document
. Em outras palavras, o estilo do componente受外界影响
e poderá ser覆盖
.
4.3.2 ViewEncapsulation.Emulated
importar { Componente, ViewEncapsulation } de '@angular/core'; @Componente({ seletor: 'meu-app', ..., encapsulamento: ViewEncapsulation.Emulated // Nenhum | Emulado | }) classe de exportação AppComponent { nome: string = 'Semlinker'; }
O resultado da configuração ViewEncapsulation.Emulated
é que não há Shadow DOM
, mas o componente é encapsulado por meio样式包装机制
fornecido pelo Angular
para que o estilo do componente不受外部影响
. Embora o estilo ainda seja aplicado a整个document
, o Angular cria um seletor [_ngcontent-cmy-0]
para a classe .greet
. Pode-se observar que为组件定义的样式,被Angular 修改了
. Entre eles, _nghost-cmy- 和_ngcontent-cmy-
são usados para实现局部的样式
.
4.3.3 ViewEncapsulation.ShadowDom
importar { Componente, ViewEncapsulation } de '@angular/core'; @Componente({ seletor: 'meu-app', ..., encapsulamento: ViewEncapsulation.ShadowDom // Nenhum Emulado | }) classe de exportação AppComponent { nome: string = 'Semlinker'; }
O resultado da configuração ViewEncapsulation.ShadowDom
é usar o recurso nativo Shadow DOM
. Angular Shadow DOM 形式渲染
suportado pelo navegador.