En aquest tema, aprendrem com treballar amb paràmetres de ruta en Angular. Els paràmetres de ruta són una manera de passar informació a través de l'URL, la qual cosa permet que les aplicacions Angular siguin més dinàmiques i interactives.
Objectius
- Entendre què són els paràmetres de ruta.
- Aprendre a definir rutes amb paràmetres.
- Accedir als paràmetres de ruta des dels components.
- Utilitzar paràmetres de ruta per a la navegació dinàmica.
Què són els paràmetres de ruta?
Els paràmetres de ruta són segments de l'URL que poden contenir informació variable. Per exemple, en una aplicació de comerç electrònic, podríem tenir una ruta per a la pàgina de detall d'un producte que inclogui l'ID del producte com a paràmetre de ruta.
Exemple d'URL amb paràmetre de ruta:
En aquest cas, 123
és un paràmetre de ruta que representa l'ID del producte.
Definició de rutes amb paràmetres
Per definir una ruta amb paràmetres en Angular, utilitzem la sintaxi :paramName
en la configuració de rutes.
Exemple de configuració de rutes amb paràmetres:
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 aquest exemple, hem definit una ruta product/:id
on :id
és un paràmetre de ruta.
Accés als paràmetres de ruta
Per accedir als paràmetres de ruta des d'un component, utilitzem el servei ActivatedRoute
d'Angular.
Exemple d'accés als paràmetres de ruta:
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.productId = this.route.snapshot.paramMap.get('id'); } }
En aquest exemple, utilitzem this.route.snapshot.paramMap.get('id')
per obtenir el valor del paràmetre id
de la ruta.
Navegació dinàmica amb paràmetres de ruta
Podem utilitzar el servei Router
per navegar dinàmicament a una ruta amb paràmetres.
Exemple de navegació dinàmica:
import { Component } from '@angular/core'; import { Router } from '@angular/router'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', styleUrls: ['./product-list.component.css'] }) export class ProductListComponent { constructor(private router: Router) { } viewProduct(productId: string): void { this.router.navigate(['/product', productId]); } }
En aquest exemple, utilitzem this.router.navigate(['/product', productId])
per navegar a la ruta product/:id
amb el valor del paràmetre productId
.
Exercici pràctic
Objectiu
Crear una aplicació Angular que mostri una llista de productes i permeti veure els detalls de cada producte utilitzant paràmetres de ruta.
Passos
-
Crear un component de llista de productes:
ng generate component product-list
-
Crear un component de detall de producte:
ng generate component product-detail
-
Definir les rutes en
app-routing.module.ts
:import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { ProductListComponent } from './product-list/product-list.component'; import { ProductDetailComponent } from './product-detail/product-detail.component'; const routes: Routes = [ { path: 'products', component: ProductListComponent }, { path: 'product/:id', component: ProductDetailComponent }, { path: '', redirectTo: '/products', pathMatch: 'full' } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }
-
Implementar la lògica per a la llista de productes en
product-list.component.ts
:import { Component } from '@angular/core'; import { Router } from '@angular/router'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', styleUrls: ['./product-list.component.css'] }) export class ProductListComponent { products = [ { id: '1', name: 'Product 1' }, { id: '2', name: 'Product 2' }, { id: '3', name: 'Product 3' } ]; constructor(private router: Router) { } viewProduct(productId: string): void { this.router.navigate(['/product', productId]); } }
-
Implementar la lògica per al detall de producte en
product-detail.component.ts
: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.productId = this.route.snapshot.paramMap.get('id'); } }
-
Crear les plantilles HTML per als components:
product-list.component.html
:<h2>Product List</h2> <ul> <li *ngFor="let product of products"> {{ product.name }} <button (click)="viewProduct(product.id)">View Details</button> </li> </ul>
product-detail.component.html
:<h2>Product Detail</h2> <p>Product ID: {{ productId }}</p>
Solució
Si has seguit els passos anteriors, hauràs creat una aplicació Angular que mostra una llista de productes i permet veure els detalls de cada producte utilitzant paràmetres de ruta.
Resum
En aquest tema, hem après què són els paràmetres de ruta i com utilitzar-los en Angular per crear aplicacions dinàmiques. Hem vist com definir rutes amb paràmetres, accedir als paràmetres de ruta des dels components i utilitzar paràmetres de ruta per a la navegació dinàmica. També hem realitzat un exercici pràctic per reforçar els conceptes apresos.
En el següent tema, explorarem les rutes fills, que ens permetran crear estructures de navegació més complexes dins de les nostres aplicacions Angular.
Curs d'Angular 2+
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- La teva primera aplicació Angular
- Arquitectura d'Angular
Mòdul 2: Conceptes bàsics de TypeScript
- Introducció a TypeScript
- Variables i tipus de dades en TypeScript
- Funcions i funcions fletxa
- Classes i interfícies
Mòdul 3: Components i plantilles
Mòdul 4: Directives i pipes
Mòdul 5: Serveis i injecció de dependències
Mòdul 6: Enrutament i navegació
Mòdul 7: Formularis en Angular
Mòdul 8: Client HTTP i observables
- Introducció al client HTTP
- Realització de sol·licituds HTTP
- Gestió de respostes HTTP
- Ús d'observables