ng add @angular/router
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'about', component: AboutComponent },
// Otras rutas aquí
];
@NgModule({
declarations: [
// tus componentes
],
imports: [
RouterModule.forRoot(routes),
// otros módulos
],
bootstrap: [AppComponent]
})
export class AppModule { }
ng generate component home
ng generate component about
<nav>
<a routerLink="/home">Home</a>
<a routerLink="/about">About</a>
</nav>
<router-outlet></router-outlet>
Navegación Programática
Para navegar programáticamente entre rutas, utilizar el router de Angular. Aquí hay un ejemplo de cómo hacerlo en un componente:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-home',
template: `<button (click)="goToAbout()">Go to About</button>`
})
export class HomeComponent {
constructor(private router: Router) {}
goToAbout() {
this.router.navigate(['/about']);
}
}
Parámetros de ruta
Angular permite pasar parámetros a través de las rutas. Por ejemplo:
const routes: Routes = [
{ path: 'user/:id', component: UserComponent },
];
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-user',
template: `<p>User ID: </p>`
})
export class UserComponent implements OnInit {
userId!: string;
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.userId = this.route.snapshot.paramMap.get('id')!;
}
}
Rutas Hijas
Para crear rutas anidadas, puedes definir rutas hijas:
const routes: Routes = [
{
path: 'products',
component: ProductsComponent,
children: [
{ path: 'details/:id', component: ProductDetailsComponent },
{ path: 'reviews', component: ProductReviewsComponent },
]
}
];
No olvides incluir un
Protección de Rutas
Para proteger rutas que requieren autenticación, usar guardias de rutas. Crear una guardia con el siguiente comando:
ng generate guard auth
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
const isAuthenticated = false; // Lógica de autenticación
if (!isAuthenticated) {
this.router.navigate(['/login']);
return false;
}
return true;
}
}
{ path: 'protected', component: ProtectedComponent, canActivate: [AuthGuard] }