Angular
Tutorial Angular: Parámetros en rutas con ActivatedRoute
Angular - Aprende a manejar parámetros en rutas con ActivatedRoute. Configura rutas dinámicas y accede a los parámetros usando params, paramMap, snapshot y la función inject().
Aprende Angular GRATIS y certifícateLos parámetros en rutas son partes variables dentro de las URLs. Estas partes variables, o parámetros, permiten que una misma ruta pueda manejar diferentes datos dependiendo del valor del parámetro. Por ejemplo:
- Una ruta de perfil de usuario:
/usuario/:nombre
- Una ruta de detalle de producto:
/producto/:id
- Una ruta de categoría y subcategoría:
/categoria/:catId/subcategoria/:subId
En estos ejemplos, los segmentos precedidos por :
son parámetros que pueden cambiar dinámicamente.
Configuración de rutas con parámetros
Para configurar rutas con parámetros en Angular, debes usar el módulo RouterModule
del paquete @angular/router
. Los parámetros de rutas permiten que las rutas sean dinámicas y flexibles, lo que facilita la administración de rutas basadas en valores específicos como identificadores o nombres.
En el archivo de configuración de rutas (app-routing.module.ts
o el de tu elección), tu array de rutas debería incluir un objeto de ruta que contenga una propiedad path
con los segmentos de ruta y los parámetros denotados por los dos puntos (:
).
Si estás trabajando en una aplicación más pequeña o un componente independiente (standalone) que no requiere un archivo de enrutamiento específico, puedes configurar las rutas directamente en el archivo principal de la aplicación (generalmente app.module.ts
) o en el propio componente standalone. Independientemente de dónde definas tus rutas, la estructura básica será la misma.
Por ejemplo:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DetalleProductoComponent } from './detalle-producto/detalle-producto.component';
const routes: Routes = [
{ path: 'producto/:id', component: DetalleProductoComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
En este ejemplo, :id
es un parámetro de ruta. La ruta producto/:id
permitirá la navegación a DetalleProductoComponent
con un parámetro dinámico id
.
Puedes definir múltiples parámetros en una ruta. Por ejemplo:
const routes: Routes = [
{ path: 'producto/:categoria/:id', component: DetalleProductoComponent }
];
Aquí la ruta producto/:categoria/:id
define dos parámetros de ruta: categoria
e id
.
Acceso a los parámetros utilizando ActivatedRoute
Para acceder a los parámetros de una ruta en Angular, se utiliza el servicio ActivatedRoute
, que proporciona acceso a los datos de la ruta asociada con el componente que se está instanciando actualmente. Este servicio permite suscribirse a los cambios en la ruta y acceder a los parámetros de diversas maneras.
Existen varias maneras de acceder a los parámetros de una ruta en Angular, a través de ActivatedRoute
. Cada método tiene sus propias características y casos de uso. Además, con las versiones más recientes de Angular, podemos utilizar la función inject()
como una alternativa a la inyección de dependencias en el constructor.
params
El params
de ActivatedRoute
devuelve un observable que emite un objeto cada vez que los parámetros son emitidos por el router. Este método es útil para suscribirse a los cambios de parámetros y reaccionar ante ellos.
Para comenzar a usar ActivatedRoute
, primero debes inyectarlo en el constructor del componente donde necesitas acceder a los parámetros de la ruta.
Ejemplo usando el constructor:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-detalle-producto',
templateUrl: './detalle-producto.component.html',
styleUrls: ['./detalle-producto.component.css']
})
export class DetalleProductoComponent implements OnInit {
id: string | null = null;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.params.subscribe(params => {
this.id = params['id'];
console.log(this.id);
});
}
}
En este ejemplo, ActivatedRoute
es inyectado en el constructor y luego utilizado en el hook ngOnInit
para suscribirse a los cambios en los parámetros de la ruta. La propiedad params
de ActivatedRoute
es un observable que contiene los parámetros de la URL.
Ejemplo usando inject()
:
import { Component, OnInit, inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-detalle-producto',
templateUrl: './detalle-producto.component.html',
styleUrls: ['./detalle-producto.component.css']
})
export class DetalleProductoComponent implements OnInit {
private route = inject(ActivatedRoute);
id: string | null = null;
ngOnInit() {
this.route.params.subscribe(params => {
this.id = params['id'];
console.log(this.id);
});
}
}
paramMap
Otra manera de acceder a los parámetros es utilizando paramMap
, que proporciona métodos de acceso más seguros para los parámetros y soporta mejor los escenarios donde los parámetros son opcionales.
Ejemplo usando el constructor:
export class DetalleProductoComponent implements OnInit {
id!: string;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.paramMap.subscribe(paramMap => {
this.id = paramMap.get('id')!;
console.log(this.id);
});
}
}
En este ejemplo, paramMap
es un observable que se suscribe en ngOnInit
para obtener el objeto paramMap
, y el método get
se utiliza para recuperar el valor del parámetro id
.
Ejemplo usando inject()
:
export class DetalleProductoComponent implements OnInit {
private route = inject(ActivatedRoute);
id: string | null = null;
ngOnInit() {
this.route.paramMap.subscribe(paramMap => {
this.id = paramMap.get('id');
console.log(this.id);
});
}
}
snapshot
El snapshot de ActivatedRoute
permite acceder de manera estática a los parámetros de la ruta en el momento en que se carga el componente. Este método es útil cuando sabes que los parámetros no cambiarán durante la vida del componente y quieres evitar los costes relacionados con las suscripciones a observables.
Ejemplo usando el constructor:
export class DetalleProductoComponent implements OnInit {
id: string;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.id = this.route.snapshot.params['id'];
console.log(this.id);
}
}
El snapshot
permite acceder a los parámetros directamente y es útil cuando se sabe de antemano que los parámetros no cambiarán durante la vida del componente.
Ejemplo usando inject()
:
export class DetalleProductoComponent implements OnInit {
private route = inject(ActivatedRoute);
id: string | null = null;
ngOnInit() {
this.id = this.route.snapshot.paramMap.get('id');
console.log(this.id);
}
}
Cada método tiene ventajas dependiendo del caso de uso. params
y paramMap
son adecuados para manejar cambios dinámicos en los parámetros, mientras que snapshot
se adapta bien a situaciones estáticas donde los parámetros no varían.
ActivatedRoute
con inject()
La función inject()
es una característica más reciente de Angular que proporciona una forma alternativa y más flexible de inyectar dependencias, incluyendo ActivatedRoute
. Esta característica es parte del enfoque de Angular hacia una programación más funcional y menos dependiente de clases.
Ventajas de usar inject()
:
- Flexibilidad: Permite inyectar dependencias fuera del constructor, lo que puede ser útil en ciertos patrones de diseño.
- Legibilidad: En componentes con muchas dependencias, puede hacer que el código sea más limpio al evitar constructores largos.
- Uso en funciones: Permite la inyección de dependencias en funciones utilitarias o hooks personalizados.
- Compatibilidad con componentes independientes (standalone): Facilita la configuración de componentes independientes sin necesidad de módulos.
Ejemplos de uso
Componentes standalone
import { Component, inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-detalle-producto',
standalone: true,
template: '<h1>ID del producto: {{productId}}</h1>'
})
export class DetalleProductoComponent {
private route = inject(ActivatedRoute);
productId = this.route.snapshot.paramMap.get('id');
}
Hooks personalizados
import { inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
export function useProductId() {
const route = inject(ActivatedRoute);
return route.paramMap.pipe(
map(params => params.get('id'))
);
}
// Uso en un componente
@Component({...})
export class ProductoComponent {
productId$ = useProductId();
}
Ejercicios de esta lección Parámetros en rutas con ActivatedRoute
Evalúa tus conocimientos de esta lección Parámetros en rutas con ActivatedRoute con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Signals en Angular
Guards funcionales
Decodificar JWT en Angular
Servicio con HttpClient
Ciclo de vida de componentes en Angular
Gestión de productos de Fake Store API
Data binding en Angular
Routes sin módulos en Angular
Router en Angular
Instalación de Angular
Route Guards basados en interfaces
La directiva @if en Angular
Formularios reactivos en Angular
Servicios en Angular
Interceptor funcional
Servicio con Array
La directiva @for en Angular
Interceptores HTTP
Componentes standalone true
Formularios con ngModel en Angular
Routes en Angular
Comunicación entre componentes Angular
Parámetros en rutas con ActivatedRoute
CRUD de Restaurantes y Platos
Tablas en Angular Material
Formulario de registro de usuarios
Instalación y uso de NgBoostrap
Desarrollo de componentes Angular
JWT en Angular
Formularios reactivos en Angular
Formularios en Angular Material
Layout con Angular Material
Effects en Angular
Data binding
HttpClient en servicios de Angular
Desarrollo de módulos Angular
Comandos Angular CLI
Subir archivo en formularios
La directiva routerLink en Angular
Todas las lecciones de Angular
Accede a todas las lecciones de Angular y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Instalación Angular
Introducción Y Entorno
Comandos Angular Cli
Introducción Y Entorno
Desarrollo De Componentes Angular
Componentes
Data Binding En Angular
Componentes
Ciclo De Vida De Componentes En Angular
Componentes
Comunicación Entre Componentes Angular
Componentes
La Directiva @If En Angular
Componentes
La Directiva @For En Angular
Componentes
Componentes Standalone
Componentes
Desarrollo De Módulos Angular
Módulos
Routes En Angular
Enrutado Y Navegación
Router En Angular
Enrutado Y Navegación
La Directiva Routerlink En Angular
Enrutado Y Navegación
Parámetros En Rutas Con Activatedroute
Enrutado Y Navegación
Routes Sin Módulos En Angular
Enrutado Y Navegación
Servicios En Angular
Servicios E Inyección De Dependencias
Httpclient En Servicios De Angular
Servicios E Inyección De Dependencias
Formularios Con Ngmodel En Angular
Formularios
Formularios Reactivos En Angular
Formularios
Subir Archivo En Formularios
Formularios
Layout Con Angular Material
Integración Con Angular Material
Tablas En Angular Material
Integración Con Angular Material
Formularios En Angular Material
Integración Con Angular Material
Instalación Y Uso De Ngboostrap
Integración Con Bootstrap Css
Signals En Angular
Signals Y Reactividad
Effects En Angular
Signals Y Reactividad
Route Guards Basados En Interfaces
Autenticación Y Autorización
Guards Funcionales
Autenticación Y Autorización
Interceptores Http Basados En Interfaz
Autenticación Y Autorización
Interceptores Http Funcionales
Autenticación Y Autorización
Seguridad Jwt En Angular
Autenticación Y Autorización
Decodificar Tokens Jwt En Angular
Autenticación Y Autorización
Certificados de superación de Angular
Supera todos los ejercicios de programación del curso de Angular y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Configurar rutas con parámetros en Angular usando
RouterModule
. - Acceder a los parámetros de las rutas usando
ActivatedRoute
. - Diferenciar entre los métodos
params
,paramMap
ysnapshot
. - Utilizar la función
inject()
para acceder a las dependencias deActivatedRoute
. - Implementar rutas dinámicas y flexibles en una aplicación Angular.