Angular-Loiane-Training

Este repositorio contem exemplos documentados e descricoes dos conteudos estudados ao longo do curso de Angular da Loiane

View project on GitHub

Criacao Modulo de Funcionalidades

Com o aumento da dimensao do codigo fonte, torna-se interesante a organizacao do projeto em modulos, isto torna a interpretacao e manutencao do codigo fonte mais facies.

Para exemplificar a organizacao do projeto em modulos, vamos neste exemplo criar um modulo para cursos, este contem as classes relativos aos cursos, a organizacao dos diretorios estas conforme o diagrama.

cursos
  |
  |-- cursos.component.ts
  |-- cursos.component.html
  |-- cursos.component.css
  |-- cursos-service.service.ts
  |
  |-- curso-detalhe
  |         |
  |         |- curso-detalhe.component.ts
  |         |- curso-detalhe.component.html
  |         |- curso-detalhe.component.css
  |         
  |- curso-nao-encontrado
  |         |
  |         |-- curso-nao-encontrado.component.ts
  |         |-- curso-nao-encontrado.component.html
  |         |-- curso-nao-encontrado.component.css
  |
  |
  |-- cursos.module.ts

No arquivo cursos.module.ts, o decorator @NgModule contem os meta-dados, em declarations estaram as classes dos components, em imports estao os modulos base do angular (contem diretivas ngIf, ngFor, validacoes etc.), e em providers estao os servicos utilizados pelos components do modulo.

import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { NgModule } from "@angular/core";
import { CursoDetalheComponent } from './curso-detalhe/curso-detalhe.component';
import { CursoNaoEncontradoComponent } from './curso-nao-encontrado/curso-nao-encontrado.component';
import { CursosServiceService } from './cursos-service.service';
import { CursosRotasComponent } from './cursos.component';

@NgModule({
    declarations: [
        CursosRotasComponent,
        CursoDetalheComponent,
        CursoNaoEncontradoComponent
    ],
    imports: [
      CommonModule, // possui as diretivas ngIf ngFor, validaceos e etc.
      RouterModule
    ],
    exports: [],
    providers:[CursosServiceService]
})
export class CursosModule {}

OBS: neste repositorio, a estrutura de pastas do codigo fonte esta de acordo com as secoes do curso,

_06-rotas
    |
    |-- rotas
    |     |
    |     |-- cursos
    |     |     |
    |     |     |-- cursos.component.ts
    |     |     |-- cursos.component.html
    |     |     |-- cursos.component.css
    |     |     |-- cursos-service.service.ts
    |     |     |
    |     |     |-- curso-detalhe
    |     |     |         |
    |     |     |         |- curso-detalhe.component.ts
    |     |     |         |- curso-detalhe.component.html
    |     |     |         |- curso-detalhe.component.css
    |     |     |         
    |     |     |- curso-nao-encontrado
    |     |     |         |
    |     |     |         |-- curso-nao-encontrado.component.ts
    |     |     |         |-- curso-nao-encontrado.component.html
    |     |     |         |-- curso-nao-encontrado.component.css
    |     |     |
    |     |     |
    |     |     |-- cursos.module.ts
    |     |
    |     |
    |     |-- home
    |     |     |
    |     |     |-- home.component.ts
    |     |     |-- home.component.html
    |     |     |-- home.component.css
    |     |     
    |     |-- login
    |          |
    |          |-- login.component.ts
    |          |-- login.component.html
    |          |-- login.component.css
    |
    |-- rotas.module.ts           

iremos aproveitar este cenario para organizar os modulos, todos os codigos relativos a rotas estao no diretorio _06-rotas, podemos criar um modulo relativo a esta secao do curso, rotas.module.ts, que contera as declaracoes de HomeComponent, LoginComponent e os codigos fonte relativos a cursos ja estao organizados em cursos.module.ts, logo basta importa-lo.

import { HomeComponent } from './rotas/home/home.component';
import { NgModule } from "@angular/core";
import { CursosModule } from './rotas/cursos/cursos.module';
import { LoginComponent } from './rotas/login/login.component';

@NgModule({
  declarations: [
    HomeComponent,
    LoginComponent
  ],
  imports: [
   CursosModule
  ],
})
export class RotasModule {}

e por fim declarar o RotasModule no modulo raiz para diponibiliza-lo para toda a aplicacao.

```typescript …

import { RotasModule } from ‘./_06-rotas/rotas.module’;

@NgModule({ …

imports: [

RodasModule ],

… }) export class AppModule {}