
@Component1.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. |
selectorpode 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, selector22.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.