Renderizado Dinámico de Productos por Categoría en Angular

Clase 4 de 25Curso de Angular Router: Lazy Loading y Programación Modular

Resumen

Cuando construyes URLs en tu aplicación, éstas pueden poseer parámetros dinámicos, por lo general, IDs para identificar registros, para capturarlos y manipularlos posteriormente.

Capturando parámetros de URL

Veamos a continuación dos maneras de capturar estos parámetros, una síncrona y otra asíncrona.

Captura de parámetros síncronos

El mejor lugar para capturar parámetros de URL, sean síncronos o no, es utilizando los hooks de ciclo de vida de Angular, más concretamente ngOnInit().

1. Creando rutas

Comienza creando tus rutas que permitan ingresar parámetros dinámicos de la siguiente manera:

// app-routing.module.ts
const routes: Routes = [
  {
    path: 'catalogo',
    component: CatalogoComponent
  },
  {
    path: 'catalogo/:categoryId',
    component: CatalogoComponent
  },
];

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

Observa que ambas rutas apuntan al mismo componente, eso está bien. La diferencia estará en que la segunda ruta posee :categoryId y podrás capturar el parámetro utilizando ese mismo nombre.

2. Inyección de servicios necesarios

En el componente correspondiente, inyecta el servicio ActivatedRoute y también importa Params para tipar tus datos y manipularlos más fácilmente. Ambos imports provenientes de @angular/router.

// modules/website/components/catalogo/catalogo.components.ts
import { ActivatedRoute, Params, Router } from '@angular/router';

@Component({
  selector: 'app-catalogo',
  templateUrl: './catalogo.component.html',
  styleUrls: ['./catalogo.component.scss']
})
export class CatalogoComponent {
  constructor(private route: ActivatedRoute) { }
}

3. Capturando parámetros

Es momento de capturar los parámetros en el ngOnInit(). Para esto, basta con una línea de código como la siguiente:

// modules/website/components/catalogo/catalogo.components.ts
ngOnInit(): void {
  const categoryId = this.route.snapshot.paramMap.get('categoryId');
  console.log(categoryId);
}

Guardarás en la constante categoryId el valor del parámetro que lleva el mismo nombre que definiste en el archivo app-routing.module.ts. Luego podrás utilizarlos para realizar peticiones a un servidor o para lo que necesites.

Captura de parámetros asíncronos

Una URL puede cambiar y a veces es conveniente estar escuchando de forma activa los cambios en la misma.
Para que los Observables nos ayuden a estar atentos a estos cambios, Angular también nos permite suscribirnos a los cambios en los parámetros de URL de la siguiente manera.

// modules/website/components/catalogo/catalogo.components.ts
ngOnInit(): void {
  this.route.paramMap
    .subscribe((params: Params) => {
      const categoryId = params.get('categoryId');
      console.log(categoryId);
    });
}

A través del nombre del parámetro definido en el archivo app-routing.module.ts, capturas los datos para manipularlos posteriormente.

De esta manera, puedes pasar parámetros dinámicamente, de forma síncrona o asíncrona, dependiendo tu necesidad y construir tu aplicación.


Contribución creada por: Kevin Fiorentino.