Angular router y su configuración

Vamos a introducir el concepto de Angular Router y como realizar su configuración para que las cosas nos queden organizadas. Angular Router se encarga de decidir que componentes de Angular se muestran en cada momento.

Vamos a ver un ejemplo sencillo creando dos componentes c1 y c2 , para ello ejecutamos angular-cli:

ng generate component c1

ng generate component c2

Esto nos generará dos componentes en nuestra aplicación de angular:

Vamos a cambiar las plantillas para que cada uno tenga un mensaje en castellano:


  este es el componente 1 

  este es el componente 2 

 

Angular Router

Es momento de configurar Angular Router , para ello el primer paso es modificar el fichero app.module.ts y  añadir la configuración propia del router.


import { RouterModule, Routes } from '@angular/router';

El siguiente paso es definir un conjunto de rutas válido:


const rutas: Routes = [
  { path: 'c1', component: C1Component },
  { path: 'c2', component: C2Component },
 { path: '',   redirectTo: '/c1', pathMatch: 'full' },
];

Angular y Rutas

En este caso solamente hemos declarado dos rutas cada una de ellas carga un componente. Ademas hemos añadido una ruta vacía que realiza un redirect y nos carga el componente1 . Nos queda configurar el Router para que realice tareas de debugging cada vez que solicitemos una ruta eso se realiza a nivel de @NgModule


@NgModule({
  declarations: [
    AppComponent,
    C1Component,
    C2Component
  ],
  imports: [
    BrowserModule,
    RouterModule.forRoot(
      rutas,
      { enableTracing: true } // <-- tareas de debug
    )
  ],
  providers: [],
  bootstrap: [AppComponent]
})

Hemos terminado de configurar el router y sus dos rutas más sencillas , nos queda modificar el fichero de app.component.html para que no cargue por defecto ningún componente y se apoye en el router en este caso hay que utilizar las etiquetas de “router-outlet” en la página.


<router-outlet></router-outlet>

Es momento de probar el router , utilizamos ng serve y arrancamos la aplicación:

El componente c1 carga sin problemas , vamos a ver el segundo:

Angular Router y Modulos

En muchas ocasiones es preferible definir el sistema de enrutado de forma independiente y no cargarlo todo en el app.module.ts.

Vamos a ver como hacerlo . El primer paso es crear un nuevo módulo en la aplicación

ng generate module rutas

Esto nos generará una nueva carpeta con el módulo:

Es en este módulo en el cual vamos a ubicar toda la funcionalidad del sistema de rutas:


import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';
import { C1Component } from '../c1/c1.component';
import { C2Component } from '../c2/c2.component';
const rutas: Routes = [
  { path: 'c1', component: C1Component },
  { path: 'c2', component: C2Component },
 { path: '',   redirectTo: '/c1', pathMatch: 'full' },
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forRoot(
      rutas,
      { enableTracing: true }
    )
  ],
  declarations: [],
  exports :[
    RouterModule
  ],
})
export class RutasModule {

 }

En este caso hemos trasladado toda la funcionalidad del enrutado a nuestro nuevo módulo y hemos solicitado que se exporte el RouterModule.


exports :[ RouterModule ]

Ahora bien como queda el app.module. Vamos a verlo:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { C1Component } from './c1/c1.component';
import { C2Component } from './c2/c2.component';
import { RouterModule, Routes } from '@angular/router';
import {RutasModule} from "./rutas/rutas.module";

@NgModule({
  declarations: [
    AppComponent,
    C1Component,
    C2Component
  ],
  imports: [
    BrowserModule,
      RutasModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Hemos exportado el sistema de rutas a un módulo independiente y ahora todo queda más ordenado:

Otros artículos relacionados

  1. Angular Modules y el uso de servicios
  2. Angular ngFor la directiva y sus opciones
  3. Angular async pipe y observables
  4. Angular