Componentes no Angular

Gerson Rodrigues Santos
NAVE Recife
Published in
6 min readJun 3, 2020

Fala galerinha, blz? Hoje vamos dar continuidade ao assunto e neste artigo entenderemos como componentes funcionam no Angular. Partindo de um novo projeto igual o da aula passada, vamos entender como eles são criados, como é a sua estrutura e vamos implementar um pequena lógica a partir deles.

Como vocês já sabem, atualmente, o Angular é o segundo framework de JavaScript front-end mais usado (O primeiro, se contarmos AngularJs e Angular).

Bom, disso vocês já sabem, mas o que ainda não sabem é que uma das partes mais importantes de um projeto Angular é o que chamamos de componentes, pois eles são a parte lógica da aplicação.

Criando componente com o Angular CLI

Primeiramente, em todos os projetos Angular, usaremos a ferramenta Angular CLI para criar componentes (Se você não lembra que ferramenta é essa, no artigo da aula passada eu explico um pouco, neste link ou no link a baixo). Com ela não precisamos nos preocupar com a estrutura do componente, pois ela adiciona o mesmo ao projeto já com um código inicial automaticamente.

Um componente pode ser criado de forma bastante simples, utilizando o comando ng generate component <nome>.

Exemplo de uso:

Terminal 1. Comando para a criação do componente

O comando acima gerará um novo componente dentro da pasta “src/app” chamado “HeaderComponent”, dentro de uma pasta chamada “header”. O resultado da execução desse comando é:

Terminal 2. Saída do comando após criação do componente.

Observe que além de criar um novo diretório e os quatro arquivos necessários para um componente, esse comando também atualiza o arquivo app.module.ts, com o objetivo de incluir nele os dados necessárias para informar ao Angular sobre esse novo componente.

Esse novo componente que foi criado será composto pelos arquivos “header.component.html”, “header.component.css” e “header.component.ts”, que contém a estrutura do componente.

Como vocês irão ver, o Angular CLI facilita muito na criação de novos elementos, sejam eles componentes, módulos, serviços e etc, pois além de criar os arquivos que o compõem, também registra o componente ou modulo a nível de projeto.

No Angular, todo componente precisa ser registrado em um módulo antes de ser utilizado. O Angular CLI, ao criar o componente, também configura a referência para ele no arquivo app.modules.ts, conforme Código 1, de modo que não precisamos nos preocupar com esse passo.

Código 1. Vínculo do HeaderComponent no arquivo app.modules.ts

No código acima vemos a referência ao componente dentro do decorator @NgModule na propriedade declarations. É nela que, a princípio, ficarão quase todos os componentes da nossa aplicação.

Antes que me perguntem “O que é um decorator?”, aqui a resposta.

Estrutura de um Componente

Os componentes são classes escritas em Type Script que recebem o decorator @Component, assim como mostra no Código 2 o componente que criamos com o Comando 1. Vamos analisar esse código juntos ao longo dessa seção, portanto não se preocupe em entendê-lo completamente agora. Atente-se apenas para o fato dele ser uma classe com um decorator, por enquanto.

Código 2. Exemplo de um componente no Angular

Para analisarmos esse código precisamos dividi-lo em duas partes:

  • Metadata: são definições que iremos informar ao Angular que a nossa classe é um componente, por meio de decorators, nesse caso @Component
  • Classe: assim como em qualquer linguagem de programação que utiliza o paradigma da orientação a objeto, possui suas propriedades e métodos

Um componente é um tipo de classe existente em uma aplicação Angular, eles são identificados com o decorator @Component. Neste decorator existem algumas propriedades mais utilizadas como: selector, templateUrl e style. Vamos especificá-las:

  • selector é como identificamos o nosso componente. Para todo o componente existe um elemento único associado que permite que ele seja adicionado em um documento HTML. Nesse caso, o nome do elemento desse componente é “app-header” e deve ser escrito como <app-header></app-header>
  • templateUrl é o nome do documento HTML que será a parte visual do componente. Nele podemos ter código em HTML juntamente com todos os bindings e diretivas necessários para a exibição do componente no navegador
  • template também usado para descrever a parte visual do componente, porém nesse caso podemos fornecer código HTML “hard coded”, como texto
  • styleUrl é onde informamos quais folhas de estilo contêm o código CSS que será aplicado ao template do componente.

Com isso podemos concluir que a estrutura de um componente Angular deve ser formada por esses três elementos, template (HTML), estilo (CSS) e classe (TypeScript). Essas partes são organizadas em arquivos separados e unidas nos metadados do componente através do decorator @Component.

No Código 3 vemos uma outra forma de descrever o template do componente usando HTML diretamente na propriedade template, sem a necessidade de criar um arquivo HTML no projeto.

Código 3. Outro exemplo de componente usando a propriedade template ao invés de templateUrl.

Seguindo o Angular Style Guide como boa prática, o código HTML implementado na propriedade template deve conter poucas linhas. Caso este seja um código mais elaborado é recomendável colocá-lo em um documento HTML, utilizando a propriedade templateUrl para indicar a localização deste arquivo.

Agora que nosso componente esta criado podemos fazer referência a ele em outros componentes do projeto usando o seletor “app-header”. Nesse caso basta colocarmos a tag <app-header></app-header> dentro do HTML do template de outra pagina ou componente.

Utilizando um componente

Agora, utilizaremos o componente “app-header” para entender como ele pode funcionar em uma aplicação. Vamos aprimorar o Código 3 e usaremos o recurso do binding do Angular para exibir a variável name na view.

Para que os valores da variável possa ser exibido na view podemos utilizar a interpolation (interpolação), que consiste em adicionar o nome da variável entre chaves duplas {{ }} dentro do elemento em que o valor da variável deve aparecer.

No arquivo header.component.ts colocaremos a variável name que receberá o valor do input.

Conforme Código 4, criaremos uma variável do tipo string chamada name. A variável terá o modificador de acesso public, já que usaremos em uma view (todo ou parte de uma página web) da aplicação.

Código 4. Implementação das variáveis no arquivo header.component.ts

Para conseguirmos visualizar o conteúdo da nossa view, visto que não configuramos uma rota no nosso projeto, teremos que fazer uma alteração no arquivo “app.component.html” na raiz da nossa pasta “app”. Excluiremos o conteúdo já existente e colocaremos o seletor do nosso componente app-header para quando carregarmos a aplicação a nossa view possa aparecer, como mostra a Figura 1.

Figura 1. Colocando o seletor no arquivo app.component.html

Caso a aplicação esteja em execução, logo a nova página será exibida, do contrário, deverá executar o comando npm start em um terminal dentro da pasta do nosso projeto.

Conclusão

Os componentes são uma parte importante de toda aplicação Angular, pois é neles que criamos a lógica por trás do funcionamento das views. Os componentes angulares são modularizados, permitindo que os usuários criem vários componentes simples e facilmente substituíveis para criar componentes mais complexos, que separam bem a lógica e a apresentação(view).

Mas antes de sair criando componentes por ai, esteja atento, pois existe uma linha tênue entre fazer componentes ou copiar o código. Você deve prestar muita atenção nisso, pois pode ser que depois de vários componentes criados você chegue no ponto que costumo chamar de “Inception”.

“Eu crio um componente que agrega 3 componentes e cada componente tem mais 3 componentes dentro, e depois de muitos componentes eu caio no limbo e esqueço que componente esta dentro de qual componente e termino sem saber de mais nada”.

Ou seja, ao invés de facilitar o seu trabalho, você está criando um monstro que obrigatoriamente vai te dar mais trabalho do que a própria demanda.

Em suma neste artigo vimos como os componentes são criados, estruturados e como implementá-los em um projeto. Também vimos como podemos configurar uma variável dentro de um componente e fazer com que o seu valor seja visualizado em um template.

--

--

Gerson Rodrigues Santos
NAVE Recife

Bacharel em Sistemas de Informação, Mestre em ciência da computação, programador por acaso, design sem saber, professor por vocação, e feliz no que faz.