No internet connection
  1. Home
  2. Dúvidas Gerais

Introdução Prática às Diretivas ngIf, ngFor e ngSwitch

Por Matheus Panobianco @matheus_panobianco
    2023-12-07 15:09:26.452Z

    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!

    • 9 respostas
    1. M
      Marcos Vinícios Pereira @marcosvipe
        2023-12-08 11:49:30.376Z

        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>
        
        1. Nadielly Medeiros @Nadielly
            2024-01-04 12:58:44.747Z

            que 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 @luizaferreirafonseca
              2023-12-08 10:28:50.679Z

              Super legal, Matheus!!!!

              1. Em resposta amatheus_panobianco:

                Excelente 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>
                
                1. Legal! Não sabia do uso do else. Bem útil, obrigado @marceleeller !

                  1. Em resposta amarceleeller:

                    Legal mesmo, eu também não sabia!

                  2. Em resposta amatheus_panobianco:
                    Denise Schirmer @deniseschirmer
                      2023-12-21 09:50:06.811Z

                      muito bom

                      1. Em resposta amatheus_panobianco:
                        Nadielly Medeiros @Nadielly
                          2024-01-04 12:57:51.306Z

                          Muito bom Matheus, isso mesmo. Também estou aprendendo Angular agora e vejo que as diretivas são bastante usadas..