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
name
en 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