Angular - Estrutura Básica do projeto

Vamos falar da estrutura mais básica de um projeto Angular, considerando o mínimo que você precisa saber para entender como o projeto funciona logo após ser criado com ng new. Vou simplificar ao máximo para te dar uma visão clara de como as partes essenciais se conectam.

Estrutura Mais Básica de um Projeto Angular

Após rodar o comando ng new my-app --standalone=false, uma estrutura é gerada e algumas pastas e arquivos são especialmente importantes para o funcionamento da aplicação. Vamos focar nos elementos essenciais para entender o que acontece "nos bastidores" e como a aplicação é inicializada e exibida no navegador.

Visão Geral da Estrutura Básica

Aqui está uma visão simplificada dos principais diretórios e arquivos:

my-app/
│
├── src/
│   ├── app/
│   │   ├── app.component.ts        # Lógica do componente principal da aplicação
│   │   ├── app.component.html      # Template HTML do componente principal
│   │   ├── app.component.css       # Estilo do componente principal
│   │   ├── app.module.ts           # Módulo principal da aplicação
│   ├── index.html                  # Arquivo HTML principal
│   ├── main.ts                     # Ponto de entrada da aplicação

Vamos explorar esses elementos básicos um por um.

1. index.html: A Base HTML

O index.html é o ponto de partida do lado do navegador para a aplicação Angular. Este arquivo é um HTML simples que contém uma tag especial <app-root> que será substituída pela interface do aplicativo Angular.

Exemplo de index.html:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>MyApp</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <app-root></app-root> <!-- Este é o ponto onde a aplicação Angular será injetada -->
</body>
</html>
  • A tag <app-root> é importante, pois ela é o componente raiz que será carregado e substituído pelo Angular.
  • Este arquivo não contém muita lógica, pois todo o HTML real da aplicação vem dos componentes Angular.
  • 2. main.ts: Ponto de Entrada

    O main.ts é o ponto de entrada do TypeScript que diz ao Angular para começar a inicializar a aplicação. Ele é responsável por "dar o start" no módulo principal (AppModule).

    Exemplo de main.ts:

    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    import { AppModule } from './app/app.module';
    
    platformBrowserDynamic().bootstrapModule(AppModule)
      .catch(err => console.error(err));
    
  • A função platformBrowserDynamic().bootstrapModule(AppModule) inicializa o módulo raiz da aplicação (AppModule).
  • O AppModule é o que junta todos os componentes e configurações necessárias para que o Angular comece a trabalhar.
  • 3. app.module.ts: O Módulo Principal

    O app.module.ts é o arquivo que define o módulo principal da aplicação — o AppModule. O Angular precisa de pelo menos um módulo raiz para poder começar.

    Exemplo de app.module.ts:

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { AppComponent } from './app.component';
    
    @NgModule({
      declarations: [
        AppComponent // Aqui estamos declarando que o AppComponent faz parte do AppModule
      ],
      imports: [
        BrowserModule // O BrowserModule é necessário para rodar no navegador
      ],
      providers: [], // Aqui podemos registrar serviços globais
      bootstrap: [AppComponent] // O AppComponent é o ponto de partida da aplicação
    })
    export class AppModule { }
    
  • declarations: Componentes que pertencem a este módulo são listados aqui. Neste exemplo, temos o AppComponent.
  • imports: Módulos necessários para que este módulo funcione. BrowserModule é essencial para que a aplicação funcione em um navegador.
  • bootstrap: Diz qual componente será carregado no início — o componente raiz (AppComponent).
  • 4. app.component.ts: O Componente Raiz

    O app.component.ts é o componente principal da aplicação. Ele é um componente Angular e representa o conteúdo principal que é exibido na tela.

    Exemplo de app.component.ts:

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-root', // Esta tag é usada no HTML (index.html) para representar este componente
      templateUrl: './app.component.html', // HTML associado a este componente
      styleUrls: ['./app.component.css'] // CSS associado a este componente
    })
    export class AppComponent {
      title = 'my-app'; // Variável que pode ser usada no template para exibir informações dinâmicas
    }
    
  • selector: O seletor (app-root) é a tag usada no index.html. Quando o Angular encontra <app-root>, ele sabe que deve carregar este componente ali.
  • templateUrl: Indica o caminho para o arquivo HTML que contém a interface visual deste componente.
  • styleUrls: Indica os arquivos de estilo CSS que são aplicados a este componente.
  • 5. app.component.html: HTML do Componente Raiz

    Este é o arquivo que contém a estrutura HTML do componente principal.

    Exemplo de app.component.html:

    <div style="text-align:center">
      <h1>Welcome to {{ title }}!</h1>
    </div>
    
  • Aqui estamos usando a variável title definida no AppComponent para mostrar o texto dinâmico Welcome to my-app!.
  • O Angular usa a interpolação ({{ }}) para inserir valores dinâmicos dentro do HTML.
  • 6. app.component.css: Estilos do Componente

    Este arquivo contém os estilos CSS para o AppComponent. Você pode definir os estilos que deseja aplicar a este componente em particular.

    Exemplo de app.component.css:

    h1 {
      color: darkblue;
    }
    

    Fluxo Resumido do Carregamento

  • index.html: Contém a tag <app-root>, que é o ponto onde a aplicação Angular será inserida.
  • main.ts: Inicializa o AppModule para começar a aplicação.
  • app.module.ts: O AppModule importa o AppComponent e outros módulos necessários.
  • app.component.ts: Define o AppComponent e é usado pelo Angular para substituir a tag <app-root> no index.html pelo conteúdo do componente.
  • app.component.html e app.component.css: Contêm a interface e os estilos do AppComponent, respectivamente.
  • Resumindo o Básico do Básico

  • index.html é onde tudo começa e contém a tag <app-root>.
  • main.ts inicializa a aplicação através do AppModule.
  • app.module.ts é o módulo principal, que contém o AppComponent e outros módulos.
  • app.component.ts é o componente principal, e é ele que é carregado primeiro.
  • app.component.html e app.component.css contêm o conteúdo e os estilos para o AppComponent.
  • A estrutura é organizada para facilitar o desenvolvimento de uma aplicação escalável e modular, e o Angular gerencia tudo isso de forma a manter o projeto bem separado e fácil de gerenciar. Compreender essa estrutura básica é fundamental para seguir em frente e começar a adicionar mais funcionalidades ao seu projeto!