Diretivas no Angular

Diretivas no Angular

Quando falamos de Front-end, Angular, React e Vue são nomes que são geralmente citados no tocante ao Desenvolvimento Web com Javascript. Dentre eles, o Angular é o mais antigo, sendo utilizado amplamente até hoje em muitos projetos e empresas, por sua escalabilidade e alta capacidade de componentização.

Neste artigo, subiremos mais um degrau na nossa escalada para aprender todos os conceitos básicos do Angular (já demos o primeiro passo e, se você ainda não viu, clique aqui para ser direcionado para o primeiro artigo), focando em explicar o que são diretivas e o que algumas delas nos proporciona.

Vamos lá?

O que é o Angular?

O Angular é uma plataforma de aplicações web lançada em 2012, com o objetivo de facilitar o desenvolvimento com a linguagem Javascript, sem que fosse exigido um nível de complexidade considerável para para construir páginas dinâmicas em aplicações web.

Focado na arquitetura Model-View-Controller (MVC), o Angular divide uma determinada aplicação em três blocos principais:

  • Model - Responsável por receber as solicitações recebidas e realizar o seu gerenciamento (Angular);
  • View - Exibição das informações processadas(HTML);
  • Controller - Interage com os comandos repassados e se relaciona diretamente com a primeira camada citada (Javascript).

Já deu pra notar que o Angular conta com uma estrutura muito bem organizada e pré estabelecida para cada componente criado, não é? A seguir, programaremos juntos para criar o projeto que iremos praticar os conceitos de diretivas.

Primeiros passos

Caso você ainda não possua o Angular instalado na sua máquina, digite o seguinte código no seu terminal:

npm install -g @angular/cli

Agora que já temos o Angular devidamente habilitado para o trabalho, utilizaremos o comando a seguir para criar um novo projeto:

ng new diretivas-angular

OBS - Utilizamos para a instalação e criação de projetos o npm como ferramenta de gerenciamento de pacotes, mas escolha qual você achar melhor, visto que em nada irá atrapalhar no nosso desenvolvimento, contanto que seja instalado corretamente. Lembre-se também que, a todo momento, é importante andar com a documentação debaixo do braço, para tirar qualquer dúvida que possa aparecer!

Execute o comando “npm start” em um terminal aberto na raiz do projeto criado para que ele seja executado no seu browser. Se tudo deu certo com a criação do projeto, será gerado no seu terminal uma url que, ao clicar nela, você será redirecionado para a seguinte página:

Figura 1 - Projeto Angular em execução

Uma vez criada toda a estrutura do nosso projeto, vamos adiante!

Diretivas

Uma diretiva é uma função que é executada toda vez que o Angular é compilado. Elas são utilizadas dentro dos elementos HTML, aprimorando o dinamismo do nosso código e implementando comportamentos que, caso ela não existisse, viria a requerer um pouco mais de complexidade de código. Hoje, entenderemos duas diretivas estruturais e duas de atributos.

Diretivas estruturais

As diretivas estruturais mudam diretamente a estrutura do DOM. Dentre as principais, existem o “NgIf” e “NgFor” que, como o nome já sugere, desempenham a mesma funcionalidade de uma estrutura “if” de condição e uma estrutura “for” de repetição, respectivamente.

Antes de mais nada, vamos limpar todo nosso projeto de dados desnecessários:

Figura 2 - Removendo dados iniciais contidos no HTML do componente app

Figura 3 - Código CSS do componente App

Figura 4 - Componente App em execução no navegador

Agora que está tudo pronto, chegou a hora de criar um componente do qual iremos praticar a primeira diretiva: o NgIf. Em um terminal aberto na pasta raiz do projeto, criaremos este componente com o seguinte comando:

ng generate component condition

Ao executar este código, você perceberá que, dentro do diretório app, foi criado um novo diretório chamado “condition”. Tudo o que está em seu interior forma o componente criado. Lembre-se de implementá-lo no componente principal App, pois, caso contrário, ele não será renderizado:

Figura 5 - Implementando o componente condition no componente App

Agora, vamos imaginar que queremos fazer renderizações diferentes na tela, de acordo com um determinado dado que estará armazenado na classe do componente “Condition”. Este dado será um atributo do tipo string chamado “name” e, além dele, também criaremos um atributo do tipo lista chamado “images”, que será uma lista com dois endereços de imagens:

Figura 6 - Criando os atributos “name” e “images” no componente “condition”

Precisamos fazer uma lógica com o uso da diretiva NgIf onde, caso “name” esteja vazio, será renderizada a imagem referente à segunda posição do array. Caso contrário, renderizamos a imagem referenciada no primeiro item da lista, juntamente com o valor de “name”. Para tal, criaremos dois elementos HTML: o primeiro será uma div, que terá o nome e imagem de um humano. A segunda será um elemento ng-template, que terá a imagem de um animal.

No primeiro componente div, implementamos a propriedade “*ngIf”. O valor desta propriedade é uma string com duas condições separadas por ponto e vírgula: a primeira, caso verdadeira, renderiza a div em questão; a segunda renderiza o nosso “ng-template”, caso a condição seja falsa:

Figura 7 - Utilizando o NgIf no HTML do componente “condition”

Figura 8 - Renderização caso o atributo “name” seja diferente de uma string vazia

Figura 9 - Renderização caso o atributo “name” seja igual a uma string vazia

OBS - Caso o NgIf seja utilizado apenas para renderizar ou não um determinado elemento, você não precisa utilizar o “else”. Basta inserir a condição esperada como valor da propriedade “*ngIf”:

Figura 10 - Utilizando o NgIf apenas para renderizar ou não um elemento

De forma tão prática quanto o “NgIf”, o “NgFor” permite que seja renderizado um elemento para cada item de uma determinada lista. Para isto, criaremos um componente chamado “repetition” e, em sua classe, uma lista de objetos:

Figura 11 - Criando o componente “Repetition” e uma lista de objetos chamada “Animals”

É agora que a mágica acontece: No arquivo HTML, assim como fizemos com a diretiva NgIf, implementamos o NgFor. Seu valor será uma string com a estrutura “let item of list”, onde “item” será o nome que daremos a cada elemento dentro da lista que será percorrido e “list” é o nome do atributo que possui esta lista de objetos. A partir daí, seguimos da mesma forma que ao utilizar um laço For:

Figura 12 - Aplicando a diretiva NgFor no HTML do componente “Repetition”

Figura 13 - Código CSS para o componente “Repetition”

Figura 14 - Código das Figuras 11, 12 e 13 em execução

Diretivas de atributos

Enquanto as Diretivas estruturais mexem diretamente com a estrutura do DOM, as diretivas de atributos manipulam a aparência dos elementos do DOM. Desta forma, é possível alterar o estilo dos elementos. Como exemplo de Diretivas de atributos, utilizaremos o NgStyle e o NgClass.

A diretiva NgStyle permite que possamos alterar diretamente um determinado atributo CSS de um elemento. Diferente das diretivas estruturais que utilizamos no tópico anterior, implementamos esta diretiva entre colchetes ao invés de utilizar o prefixo “*” antes dela. Veja o exemplo abaixo:

Figura 15 - Utilizando o NgStyle

Note que, para que seja um valor aceito pela propriedade “ngStyle”, utilizamos uma string com colchetes e conjunto chave-valor, tal qual estivéssemos fazendo se fossemos criar um objeto. Inclusive, você deve estar se perguntando o porquê de utilizar esta diretiva, se simplesmente seria mais prático aplicar uma classe a esta div com todos estes atributos. A resposta para seu questionamento é que podemos atribuir valores dinâmicos a estes atributos css que estão sendo detalhados dentro do “NgStyle”:

Figura 16 - Criando atributos para os estilos CSS

Figura 17 - Aplicando valores dinâmicos para os atributos CSS de NgStyle

De forma análoga a como se implementa a diretiva NgStyle, também seguimos para implementar o NgClass. A diferença é que o valor desta diretiva será o nome de uma classe pré estabelecida no documento Css do componente em questão:

Figura 18 - Criando um atributo “classDiv” que armazenará o nome de uma classe

Figura 19 - Implementando a classe “div-repetition” no arquivo CSS do componente

Figura 20 - Implementação da diretiva NgClass no arquivo HTML do componente

OBS - É muito importante entender a importância de fazer com que determinados valores que são exibidos ou utilizados para definições sejam armazenados na classe de um componente, ao invés de ser um valor fixo pré definido dentro do arquivo HTML. Com o advento da criação de eventos (que será um conhecimento adquirido nos artigos posteriores), aprenderemos a manipular esses atributos, de forma que, de fato, tudo se torne dinâmico e facilmente alterável.

Considerações finais

No artigo de hoje aprendemos o que são diretivas e conhecemos algumas dentre as que são concedidas pelo Angular, divididas entre diretivas estruturais e de atributo. Continuaremos nos artigos posteriores trabalhando o Angular, de forma que sejam abordados mais conceitos viscerais para a programação com o mesmo. Lembre-se que existem várias diretivas e que você pode aprender mais sobre elas consultando a documentação do Angular.

Se você achou esse artigo interessante, gostaria de tirar quaisquer dúvidas ou somente está afim de trocar uma ideia sobre esses e mais assuntos, você também pode entrar em contato comigo, seja por meio do e-mail bruno.cabral.silva2018@gmail.com ou pelo meu perfil do Linkedin!

Te espero ansiosamente!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.