image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Wagner Goulart
Wagner Goulart27/09/2023 21:12
Compartilhe
Microsoft 50 Anos - Prompts InteligentesRecomendados para vocêMicrosoft 50 Anos - Prompts Inteligentes

Diretivas Angular

  • #Angular

As diretivas do Angular são comandos especiais, que são utilizados para manipular a DOM. Existem 2 tipos de diretivas que podemos utilizar, as de atributo e as estruturais.

Diretivas de Atributo:

Utilizadas para alterar a aparência e o comportamento de outro elemento, componente ou diretiva.

São elas :

  • ngClass → permite adicionar ou remover dinamicamente uma classe CSS.
/* Estilização das classes são difinidas no arquivos Css */
.enable {
color: blue;

}

.disable {
color: red;
}

export class CompAtributosComponent implements OnInit {

// propriedade de estilo, recebe como default a classe enable
estilo: string = 'enable'

constructor() { }

ngOnInit(): void {
}

// métodos trocar() faz a validação do valor que está na propriedade
// se estiver enable troca para disable
// se estiver disable troca para enable
trocar() {
  this.estilo === 'enable' ? this.estilo = 'disable' : this.estilo ='enable'
}

}

<!-- propertu binding referencia a propriedade estilo 
que está no arquivo TS -->
<p [ngClass]="estilo">comp-atributos works!</p>

<!-- Botão com event binding que dispara o método trocar() 
que está no arquivo TS -->
<button (click)="trocar()">trocar estilo</button>
  • ngStyle → permite adicionar estilos diretamente ao elemento ou componente:
<!-- Property binding,
Esse bindiing receber um objeto com as propriedades Css
os valores estão vindo de forma dinamica do aqui TS -->
<h1 [ngStyle]="{
'background': corFundo, // corFundo é definida no arquivo TS
'color': corFonte // corFonte também é definida no arquivo TS
}">Curso Angular</h1>

export class CompAtributosComponent implements OnInit {

estilo: string = 'enable'
corFundo: string = 'red' // propriedade definida na class com valor 'red'
corFonte: string = 'white' // propriedade definida na class com valor 'white'

constructor() { }
  • ngModel → cria comunicação de duas vias entre o HTML e Typescript
export class CompAtributosComponent implements OnInit {

estilo: string = 'enable'
corFundo: string = 'red'
corFonte: string = 'white'
itens : string = '' // propriedade itens recebe string vazia
lista: string[] = [] // propriedade lista receber array vazio
constructor() { }

ngOnInit(): void {
}

trocar() {
  this.estilo === 'enable' ? this.estilo = 'disable' : this.estilo ='enable'
}

// metodo que adionar os itens na lista
adicionarLista() {
  this.lista.push(this.itens)
}

}

<!-- Input receber o two-way data-binding referenciando
a propriedade itens criada no arquivo TS -->
<input type="text" [(ngModel)]="itens">
<!-- Botão receber o event binding com o metodo
adicionarLista criado no arquivo TS -->
<button (click)="adicionarLista()">Adicionar</button>
<!-- <p> redenriza o item enquando é digito através da interpolação -->
<p>{{itens}}</p>

<ul>
<!-- ngfor itera sobre o array e lista eles na tela -->
<li *ngFor="let elemento of lista">{{ elemento }}</li>
</ul>
  • ngTemplate → cria um template ( modelo ) HTML:
<!-- ngTemplate é chamado como se
fosse um componente normal -->

<!--Não irá rederizar no tela, por padrão ele é false-->
<ng-template>
<a href="#">Finalizar compra</a>
</ng-template>
<br>

<!-- Esse irá renderizar na tela, pois
o ngIf está alterando o comportamento padrão
para true-->
<ng-template [ngIf]="true">
<a href="#">Adicionar carrinho</a>
</ng-template>
  • ngContent → permite que o elemento Pai renderize os conteúdos dos elemento filhos:
<!-- app-comp-atributos está recebendo 2 componentes
filhos, esses filhos não serão renderizados até que
o ng-content seja definido no pai -->
<app-comp-atributos>
<h2>Olé</h2> <!-- Não vai renderizar na tela -->
<p>estou dentro</p> <!-- Não vai renderizar na tela -->
</app-comp-atributos>

<!-- ngContent é definido no componente pai
o atributo select indica quais tags que estão
dentro do component pai devem ser renderizadas -->
<ng-Content select="h2, p"></ng-Content>

Diretivas Estruturais

Moldam ou remodelam a DOM

  • ngIF → Condiçional utiliza para renderizar ou não um componente ou elemento HTML:
<p *ngIf="true">card works!</p>
  • Sendo possível também associá-la a um data binding:
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'diretivas-proj';
isAliveCard: boolean = true // propriedade isAliveCard criada 
                                                          //dentro da class app componente
}

<!-- Propriedade é vinculada ao componente com o ngIF -->
<!-- Dessa forma o componente será exibido ou não na tela -->
<!-- De acordo com o valor da propriedade isAlive -->
<!-- Se true o componente é exibido -->
<!-- Se false o componente não é exibido -->

<app-card *ngIf="isAliveCard"></app-card>
  • Utlizando o ngIF com o NgTemplate
<!-- else chama o ng-template através o apelido -->
<app-card *ngIf="isAliveCard; else anotherBlock"></app-card>

<!-- Bloco ng-template é criado -->
<!-- Deve se passar um apelido para o bloco iniciando com #apelido -->
<ng-template #anotherBlock >
<p>Sou um bloco secreto</p>
</ng-template>
  • ngFor → itera sobre um array, desenhando os itens na tela
export class CardComponent implements OnInit {

produtos : string[] = []

constructor() {
  // array de produtos dentro da classe card component
  this.produtos = [
    'mouse',
    'teclado',
    'cabo',
    'fonte'
  ]
}

<ul>
<!-- ngFor sendo chamdo dentro da LI -->
<!-- irá iterar sobre o array de produtos -->
<!-- e Exiber os produtos na tela através de interpolção -->
<li *ngFor="let p of produtos">{{ p }}</li>
</ul>
  • ngFor possui uma variável disponível, que podemos utiliza-la ou não, o Index. Com essa variável é possível rastrear um elemento e aplicar uma lógica nele.
<!-- let i recebe todos os index do array que está sendo iterado -->
<!-- E depois é impresso na tela com interporlação -->
<li *ngFor="let p of produtos; let i =index"
(click)='remover(i)'>{{ p }} - {{ i }}</li>
<button (click)="adicionar()">Adicionar</button>
  • ngSwitchCase → Criar blocos condicionais, esses blocos podem alternados conforme as interações do usuário
export class CardComponent implements OnInit {

produtos : string[] = []
menuType : string = 'user' // propriedade menuType, irá receber o tipo de usuário
     // cada tipo de usuário terá acesso a diferentes opções no menu
}

<!-- Property biding referenciando a propriedade menuType -->
<!-- As opções do switchCase são envolvida em elemente pai que 
recebe esse binding -->
<div [ngSwitch]="menuType">
<!-- Aqui vem os switchCases cada um com um tipo de usuário e 
  suas opçoes de menu -->
<!-- switchCaseDefault indica que se o tipo de usário não 
  for encontrado deve ser renderizar o padrão -->
<div *ngSwitchDefault="'user'">
  <ul>
    <li>Editar Perfil</li>
    <li>Adiconar cartão</li>
  </ul>
</div>
<div *ngSwitchCase="'admin'">
  <ul>
    <li>Editar Perfil</li>
    <li>Adiconar cartão</li>
    <li>Genranciar usuários</li>
  </ul>
</div>
<div *ngSwitchCase="'superUser'">
  <ul>
    <li>Editar Perfil</li>
    <li>Adiconar cartão</li>
    <li>Genranciar usuários</li>
    <li>Genrenciar Admins</li>
  </ul>
</div>
</div>
Compartilhe
Recomendados para você
Decola Tech 2025
Desenvolvimento Frontend com Angular
Potência Tech Angular Developer -  Powered by iFood
Comentários (1)
Einstein Soares
Einstein Soares - 27/09/2023 21:34

Top, Angular é uma excelente ferramenta,

Recomendados para vocêMicrosoft 50 Anos - Prompts Inteligentes