Introducción
En aplicaciones Angular, los parámetros de ruta permiten pasar información a través de la URL. Esto es útil para crear rutas dinámicas que pueden cambiar en función de los datos proporcionados. En esta sección, aprenderemos cómo configurar y utilizar parámetros de ruta en Angular.
Conceptos Clave
- Rutas Dinámicas: Rutas que pueden cambiar en función de los parámetros proporcionados en la URL.
- Parámetros de Ruta: Valores que se pasan a través de la URL y que pueden ser utilizados dentro de los componentes.
- ActivatedRoute: Servicio de Angular que proporciona acceso a la información sobre una ruta asociada a un componente cargado.
Configuración de Parámetros de Ruta
Para configurar parámetros de ruta, necesitamos definirlos en el archivo de configuración de rutas (app-routing.module.ts). Aquí hay un ejemplo básico:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ProductDetailComponent } from './product-detail/product-detail.component';
const routes: Routes = [
  { path: 'product/:id', component: ProductDetailComponent }
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }En este ejemplo, :id es un parámetro de ruta que puede ser accedido dentro del ProductDetailComponent.
Accediendo a Parámetros de Ruta
Para acceder a los parámetros de ruta dentro de un componente, utilizamos el servicio ActivatedRoute. Aquí hay un ejemplo de cómo hacerlo:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
  selector: 'app-product-detail',
  templateUrl: './product-detail.component.html',
  styleUrls: ['./product-detail.component.css']
})
export class ProductDetailComponent implements OnInit {
  productId: string;
  constructor(private route: ActivatedRoute) { }
  ngOnInit(): void {
    this.route.paramMap.subscribe(params => {
      this.productId = params.get('id');
    });
  }
}En este ejemplo, paramMap es un observable que contiene los parámetros de la ruta. Utilizamos el método get para obtener el valor del parámetro id.
Ejemplo Práctico
Supongamos que tenemos una lista de productos y queremos mostrar los detalles de un producto específico cuando el usuario hace clic en él. Aquí está el flujo completo:
- Configuración de Rutas
const routes: Routes = [
  { path: 'products', component: ProductListComponent },
  { path: 'product/:id', component: ProductDetailComponent }
];
- Componente de Lista de Productos
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
  selector: 'app-product-list',
  template: `
    <ul>
      <li *ngFor="let product of products" (click)="viewProduct(product.id)">
        {{ product.name }}
      </li>
    </ul>
  `
})
export class ProductListComponent {
  products = [
    { id: '1', name: 'Product 1' },
    { id: '2', name: 'Product 2' },
    { id: '3', name: 'Product 3' }
  ];
  constructor(private router: Router) { }
  viewProduct(id: string): void {
    this.router.navigate(['/product', id]);
  }
}
- Componente de Detalle de Producto
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
  selector: 'app-product-detail',
  template: `
    <h2>Product Details</h2>
    <p>Product ID: {{ productId }}</p>
  `
})
export class ProductDetailComponent implements OnInit {
  productId: string;
  constructor(private route: ActivatedRoute) { }
  ngOnInit(): void {
    this.route.paramMap.subscribe(params => {
      this.productId = params.get('id');
    });
  }
}Ejercicio Práctico
Ejercicio
- Configura una nueva ruta en tu aplicación Angular que acepte un parámetro de ruta llamado name.
- Crea un componente que muestre el valor del parámetro nameen su plantilla.
- Añade un enlace en otro componente que navegue a esta nueva ruta pasando un valor para el parámetro name.
Solución
1. Configuración de la Ruta
2. Componente Greet
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
  selector: 'app-greet',
  template: `
    <h2>Hello, {{ name }}!</h2>
  `
})
export class GreetComponent implements OnInit {
  name: string;
  constructor(private route: ActivatedRoute) { }
  ngOnInit(): void {
    this.route.paramMap.subscribe(params => {
      this.name = params.get('name');
    });
  }
}3. Enlace en Otro Componente
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
  selector: 'app-home',
  template: `
    <button (click)="greetUser('John')">Greet John</button>
  `
})
export class HomeComponent {
  constructor(private router: Router) { }
  greetUser(name: string): void {
    this.router.navigate(['/greet', name]);
  }
}Conclusión
En esta sección, hemos aprendido cómo configurar y utilizar parámetros de ruta en Angular. Los parámetros de ruta son esenciales para crear aplicaciones dinámicas y flexibles. Ahora estás listo para pasar al siguiente tema, donde exploraremos las rutas hijas y cómo estructurar aplicaciones más complejas.
Curso de Angular 2+
Módulo 1: Introducción a Angular
- ¿Qué es Angular?
- Configuración del Entorno de Desarrollo
- Tu Primera Aplicación Angular
- Arquitectura de Angular
Módulo 2: Conceptos Básicos de TypeScript
- Introducción a TypeScript
- Variables y Tipos de Datos en TypeScript
- Funciones y Funciones Flecha
- Clases e Interfaces
Módulo 3: Componentes y Plantillas
- Creación de Componentes
- Plantillas de Componentes
- Estilos de Componentes
- Interacción entre Componentes
Módulo 4: Directivas y Pipes
Módulo 5: Servicios e Inyección de Dependencias
- Introducción a los Servicios
- Creación y Uso de Servicios
- Inyección de Dependencias
- Inyectores Jerárquicos
Módulo 6: Enrutamiento y Navegación
Módulo 7: Formularios en Angular
- Formularios Basados en Plantillas
- Formularios Reactivos
- Validación de Formularios
- Formularios Dinámicos
Módulo 8: Cliente HTTP y Observables
- Introducción al Cliente HTTP
- Realizando Solicitudes HTTP
- Manejo de Respuestas HTTP
- Uso de Observables
Módulo 9: Gestión de Estado
- Introducción a la Gestión de Estado
- Uso de Servicios para la Gestión de Estado
- NgRx Store
- NgRx Effects
