Angular: Configuración de Rutas

La configuración de rutas en Angular permite definir cómo los usuarios navegan entre diferentes vistas o componentes en una aplicación. Esto se realiza mediante la definición de rutas que asocian URLs con componentes específicos. La configuración de rutas es crucial para crear aplicaciones SPA (Single Page Applications) que cargan una sola página HTML y actualizan dinámicamente el contenido sin recargar la página completa.

Componentes de Configuración de Rutas en Angular v18

  1. RouterModule: Proporciona los servicios de enrutamiento necesarios para la navegación en la aplicación.
  2. Routes: Define un arreglo de objetos de ruta, cada uno especificando una asociación entre una URL y un componente.
  3. Router: Servicio que permite la navegación programática y el manejo del estado de enrutamiento.
  4. ActivatedRoute: Proporciona acceso a la información sobre una ruta asociada al componente cargado en el RouterOutlet.
  5. RouterLink: Directiva para enlazar rutas en las plantillas.
  6. RouterOutlet: Directiva que actúa como un marcador de posición para los componentes cargados.
  7. Route Guards: Proporcionan una manera de controlar el acceso a las rutas (por ejemplo, CanActivate, CanDeactivate, Resolve, CanLoad, CanActivateChild).

lazy-loaded route: https://angular.dev/guide/ngmodules/lazy-loading

Videotutoriales: 

  1. Curso Angular 2023 #8 Rutas En Angular: https://youtu.be/jKabdJTNe4I
  2. Routing – Guard -  Angular (v18) https://youtu.be/oo5p4Q-zgh0
  3.  Enrutamiento  https://youtu.be/DiZ08Tzihq8 (Coders Free)
  4.  Parámetros por rutas  https://youtu.be/fCFsE4nL6Z0 (Coders Free)
  5. Rutas hijas (Atributo children)  https://youtu.be/JZMHsXdIZC4   (Coders Free)
  6. Creating a Route Module File   https://youtu.be/4fP8YR_BG4Q
  7. Rutas e Internacionalización (i18n): https://youtu.be/WldOyKV3p3Q
  8. Guardianes y Almacenamiento Local y Sesión   https://youtu.be/Lumd-96Vba4  
  9. Angular Basics - Enrutamiento (Routing) https://youtu.be/nC-do8ceLWY
  10. Routing I https://youtu.be/BhRpBIhRWbY (Píldoras informáticas)
  11. Routing II - https://youtu.be/nDsyhYQQssk
  12.  Routing III- https://youtu.be/kME1QydQ9CA
  13.  Routing IV- https://youtu.be/23EX5-e2rjs
  14. Firebase  https://youtu.be/VKWLM70o5Nc (Píldoras informáticas)

 Interpretación de cada componente

 RouterModule:

  • Importa y configura el enrutamiento en la aplicación.
import { RouterModule } from '@angular/router';

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}

 

Routes:

  • Define un arreglo de objetos de ruta.
const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

 

Router:

  • Servicio para la navegación programática.
constructor(private router: Router) {}

navigateToAbout() {
  this.router.navigate(['/about']);
}

 

ActivatedRoute:

  • Proporciona acceso a la información sobre la ruta actual.
constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.params.subscribe(params => {
    console.log(params['id']);
  });
}

 

RouterLink:

  • Directiva para enlazar rutas en las plantillas.

<a routerLink="/home">Home</a>

 

RouterOutlet:

  • Directiva que actúa como marcador de posición para los componentes cargados.

<router-outlet></router-outlet>

...

 

Route Guards:

  • Controlan el acceso a las rutas.
import { CanActivate } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  canActivate(): boolean {
    // Lógica de autenticación
    return true;
  }
}

Configuración de Rutas

Este conjunto de pasos y ejemplos proporciona una configuración completa de enrutamiento en Angular v18

Configuración del Módulo

  • Crea y configura el módulo de enrutamiento en la aplicación
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}

 

Configuración del Módulo Principal

  • Importa el módulo de enrutamiento en el módulo principal de la aplicación.
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';

@NgModule({
  declarations: [AppComponent, HomeComponent, AboutComponent],
  imports: [BrowserModule, AppRoutingModule],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}

 

Componente Principal

  • Configura el componente principal para usar el RouterOutlet y RouterLink para la navegación.
// app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <nav>
<a routerLink="/home">Home</a>
<a routerLink="/about">About</a>
</nav>
<router-outlet></router-outlet> ` }) export class AppComponent {}

 

Componente Home

  • Define el componente HomeComponent.
// home.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  template: `<h1>Home Component</h1>`
})
export class HomeComponent {}

 

Componente About

  • Define el componente AboutComponent.
// about.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-about',
  template: `

About Component

` }) export class AboutComponent {}

...

 

Configuración de Rutas con Parámetros y Guardias

 

Rutas con Parámetros

  • Define rutas que aceptan parámetros.
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { ItemDetailComponent } from './item-detail/item-detail.component';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: 'item/:id', component: ItemDetailComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}

 

Componente con Parámetros

  • Define un componente que utilice parámetros de ruta.
// item-detail.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-item-detail',
  template: `<h1>Item Detail: {{ id }}</h1>`
})
export class ItemDetailComponent implements OnInit {
  id: string;

  constructor(private route: ActivatedRoute) {}

  ngOnInit() {
    this.route.params.subscribe(params => {
      this.id = params['id'];
    });
  }
}

 

Uso de Guardia de Ruta

  • Define una guardia para proteger rutas específicas.
// auth.guard.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}

  canActivate(): boolean {
    const isAuthenticated = false; // Lógica de autenticación
    if (!isAuthenticated) {
      this.router.navigate(['/home']);
      return false;
    }
    return true;
  }
}

 

// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { ItemDetailComponent } from './item-detail/item-detail.component';
import { AuthGuard } from './auth.guard';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent, canActivate: [AuthGuard] },
  { path: 'item/:id', component: ItemDetailComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}

 --------------

 

 

 

mmmm

------------------------------------