Introdução Prática às Diretivas ngIf, ngFor e ngSwitch
Oi pessoal!
Estou começando a aprender Angular e gostaria de entender melhor o funcionamento de ngIf, ngFor e ngSwitchCase. Fiz um resuminho do que eu entendi abaixo, se alguem quiser complementar será muito bem vindo!
O ngIf é uma diretiva usada para exibir ou ocultar um elemento com base em uma condição. Por exemplo, você pode mostrar um botão apenas se uma variável for verdadeira. Como se fosse o if utilizado no JavaScript puro.
Suponha que você tenha um botão que deseja exibir apenas se uma variável chamada mostrarBotao for verdadeira:
<button *ngIf="mostrarBotao">Clique aqui</button>
No código acima, o botão só será mostrado se a variável mostrarBotao for true. Caso contrário, o botão não aparecerá na página.
Já o ngFor é utilizado para iterar sobre uma lista de elementos, como um array, e criar repetições de um elemento HTML com base nesses itens. Isso é útil para exibir uma lista de itens em uma página. Como o for do JS. No caso, uma lista de nomes e você queira exibi-los em uma lista não ordenada:
<ul>
<li *ngFor="let nome of nomes">{{ nome }}</li>
</ul>
Supondo que nomes seja um array no seu componente com vários nomes, essa diretiva ngFor criará um item de lista para cada nome na lista nomes.
E temos também o ngSwitch, que enquanto o ngIf é utilizado para condições de verdadeiro ou falso, o ngSwitch é usado quando temos vários casos e precisamos escolher entre eles. Como o switch case do JS.
<div [ngSwitch]="condicao">
<p *ngSwitchCase="'caso1'">Conteúdo para o Caso 1</p>
<p *ngSwitchCase="'caso2'">Conteúdo para o Caso 2</p>
<p *ngSwitchDefault>Conteúdo Default</p>
</div>
Nesta diretiva, o conteúdo exibido depende do valor da variável condicao. Se condicao for 'caso1', será exibido o conteúdo do primeiro caso. Se for 'caso2', será exibido o segundo conteúdo. Caso contrário, será exibido o "Conteúdo Default".
Espero que ajude alguém aqui do fórum!
- MMarcos Vinícios Pereira @marcosvipe
Olá Matheus,
Ficou excelente a forma como vc apontou e exemplificou as diretivas abordadas em aula. Vou somente acrescentar mais duas diretivas que podem ser utilizadas para estilização.ngClass: Diretiva de atributo que adiciona ou remove classes CSS com base em uma condição. Por exemplo, se você quiser adicionar uma classe CSS a um elemento somente se uma determinada condição for verdadeira, você pode usar a diretiva ngClass. Aqui está um exemplo:
<div [ngClass]="{ 'is-active': isActive }"> <p>Este elemento está ativo.</p> </div>ngStyle: Diretiva de atributo que adiciona estilos CSS a um elemento com base em uma condição. Por exemplo, se você quiser adicionar um estilo CSS a um elemento somente se uma determinada condição for verdadeira, você pode usar a diretiva ngStyle. Aqui está um exemplo:
<div [ngStyle]="{ 'background-color': isHighlighted ? 'yellow' : 'transparent' }"> <p>Este elemento pode ser destacado.</p> </div>
Nadielly Medeiros @Nadiellyque bacana marcos, a diretiva de classe aprendi agora em um projeto pessoal, a do style eu não sabia...obrigada.
Em resposta amatheus_panobianco⬆:Luiza Ferreira @luizaferreirafonsecaSuper legal, Matheus!!!!
Em resposta amatheus_panobianco⬆:Marcele Eller Gusmão Moura @marceleellerExcelente resumo sobre o uso de ngIf, ngFor, e ngSwitch no Angular! Seu esclarecimento é claro e direto ao ponto. Eu acrescentaria alguns pontos caso tenham curiosidade:
- É possível usar o 'else' para mostrar um conteúdo alternativo quando a condição do ngIf não for atendida. Exemplo:
<div *ngIf="mostrarBotao; else mensagem">Clique aqui</div> <ng-template #mensagem>Botão oculto</ng-template>- Em alguns casos, é melhor utilizar o "[hidden]" em vez de *ngIf para evitar destruir e recriar elementos no DOM desnecessariamente.
<div [hidden]="!mostrarBotao">Clique aqui</div>
Matheus Panobianco @matheus_panobiancoLegal! Não sabia do uso do else. Bem útil, obrigado @marceleeller !
- Em resposta amarceleeller⬆:
Natália Stoll Nogueira @nataliastollLegal mesmo, eu também não sabia!
Em resposta amatheus_panobianco⬆:Nadielly Medeiros @NadiellyMuito bom Matheus, isso mesmo. Também estou aprendendo Angular agora e vejo que as diretivas são bastante usadas..

