Como adicionar e remover classes CSS de forma dinâmica no Angular com ngClass
Marcelo Ribas Vismari -
Uma tarefa comum em projetos frontend é a atribuição dinâmica de classes CSS, ou seja, definir a classe CSS de um elemento com base em uma regra de negócio. Através de algumas revisões de código, tenho observado essa tarefa sendo executada frequentemente com o uso de interpolação ({{}}), por exemplo:
Apesar do exemplo acima não estar errado, podemos alcançar o mesmo objetivo usando recursos nativos do Angular, como a diretiva ngClass. Neste texto falaremos mais sobre o uso do ngClass na atribuição dinâmica de classes CSS.
Construção do cenário de estudo
Para iniciar, usei o Angular 18.1 para criar um projeto e preparar os exemplos. A seguir deixei o conteúdo de cada arquivo modificado.
No arquivo app.config.ts, configurei a globalização e a sigla da moeda, conforme já apresentado por aqui:
app.component.ts:
Arquivo app.component.html utilizando a interpolação para atribuir algumas classes CSS:
app.component.css:
A seguir há uma imagem mostrando o projeto em execução:
Atribuindo classes CSS dinamicamente com ngClass
O Angular tem um recurso chamado ngClass, que é uma diretiva extremamente útil que oferece diversas vantagens na manipulação de classes CSS de forma dinâmica. Ela permite que você aplique, remova ou alterne classes CSS com base em condições.
Adds and removes CSS classes on an HTML element. The CSS classes are updated as follows, depending on the type of the expression evaluation:
string - the CSS classes listed in the string (space delimited) are added, Array - the CSS classes declared as Array elements are added, Object - keys are CSS classes that get added when the expression given in the value evaluates to a truthy value, otherwise they are removed.
A seguir construí alguns exemplos de como utilizar o ngClass. Em todos os casos, o resultado visual será exatamente o mesmo.
Exemplo 1: adicionando e removendo (toggle) uma classe CSS de forma dinâmica
Para adicionar ou remover uma classe CSS com base em uma condição booleana, podemos usar a sintaxe: [class.minha-classe-css]="variavel". Com essa sintaxe, a classe CSS só é adicionada se a condição for verdadeira. Por exemplo, a classe produto-esgotado será adicionada se a variável esgotado for true; caso contrário, a classe será removida.
Exemplo 2: adicionando e removendo (toggle) um conjunto de classes CSS de forma dinâmica
Uma opção similar à anterior é passar um objeto "chave-valor", onde a chave é o nome da classe CSS (ou múltiplos nomes separados por espaço) e o valor é um booleano que indica se a classe deve ser adicionada ou não. Veja o exemplo abaixo:
Exemplo 3: adicionando classes CSS através de um array
Outra opção é passar um array com o nome das classes CSS para o ngClass. No exemplo a seguir, criei uma função para retornar um objeto do tipo string[] com cada classe CSS:
Testes unitários
Para concluir, criei um teste unitário que demonstra como validar a atribuição dinâmica de classes CSS com o ngClass:
Considerações
Existem diversas formas de utilizar o ngClass no Angular, cada uma com suas vantagens e desvantagens. A escolha da melhor abordagem depende do contexto específico e dos requisitos do seu projeto. Ao decidir como aplicar classes CSS, considere fatores como a legibilidade do código, a flexibilidade e o desempenho.