RouterModule
El RouterModule
en Angular es un módulo que proporciona servicios de enrutamiento en la aplicación. Permite la navegación entre diferentes vistas o componentes de la aplicación, define rutas y maneja la navegación del usuario. Facilita la creación de Single Page Applications (SPA), donde la aplicación carga una sola página HTML y actualiza dinámicamente el contenido según las interacciones del usuario.
Componentes de RouterModule en Angular v18
- RouterModule: Módulo que contiene los servicios y directivas necesarios para la navegación y el enrutamiento en Angular.
- Routes: Una interfaz que define un arreglo de rutas.
- Router: Servicio que proporciona la navegación programática y permite manipular el estado de enrutamiento.
- ActivatedRoute: Servicio que proporciona acceso a la información sobre una ruta asociada al componente que está cargado en el router outlet.
- RouterLink: Directiva para enlazar rutas en las plantillas.
- RouterOutlet: Directiva que actúa como un marcador de posición donde se cargarán los componentes asociados a las rutas.
- Route Guards: Interfaces (
CanActivate
,CanDeactivate
,Resolve
,CanLoad
,CanActivateChild
) que proporcionan una manera de controlar el acceso a las rutas.
Videotutoriales:
- Routing – Guard - Angular (v18) https://youtu.be/oo5p4Q-zgh0
- Rutas e Internacionalización (i18n): https://youtu.be/WldOyKV3p3Q
- Guardianes y Almacenamiento Local y Sesión https://youtu.be/Lumd-96Vba4
- Angular Modules https://youtu.be/VuEuc6guuxA?t=3485
Interpretación de cada componente
RouterModule:
Importa y configura el enrutamiento en la aplicación.
import { RouterModule } from '@angular/router';
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
Routes:
- Define un arreglo de rutas.
const routes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'about', component: AboutComponent },
{ path: '', redirectTo: '/home', pathMatch: 'full' }
];
Router::
Servicio para navegación programática.
constructor(private router: Router) {}
navigateToAbout() {
this.router.navigate(['/about']);
}
ActivatedRoute::
- Proporciona información sobre la ruta actual.
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.params.subscribe(params => {
console.log(params['id']);
});
}
RouterLink::
- Directiva para enlazar rutas.
<a routerLink="/home">Home</a>
RouterOutlet::
- Directiva que actúa como marcador de posición para los componentes cargados.
<router-outlet></router-outlet>
Route Guards::
- Controlan el acceso a las rutas.
import { CanActivate } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
canActivate(): boolean {
// Lógica de autenticación
return true;
}
}
Ejemplo de aplicación con RouterModule:
Este ejemplo configura una aplicación básica con enrutamiento utilizando RouterModule
. Incluye dos rutas (home
y about
) y usa el RouterOutlet
para cargar los componentes correspondientes según la ruta activa. También demuestra el uso de RouterLink
para la navegación entre las rutas.
Configuración del módulo::
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
@NgModule({
declarations: [AppComponent, HomeComponent, AboutComponent],
imports: [BrowserModule, AppRoutingModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Configuración de enrutamiento::
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
const routes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'about', component: AboutComponent },
{ path: '', redirectTo: '/home', pathMatch: 'full' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
Componente Principal::
// app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<nav>
<a routerLink="/home">Home</a>
<a routerLink="/about">About</a>
</nav>
<router-outlet></router-outlet>
`
})
export class AppComponent {}
Componente Home::
// home.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
template: ` <h1>Home Component</h1> `
})
export class HomeComponent {}
Componente About::
// about.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-about',
template: ` <h1>About Component</h1> `
})
export class AboutComponent {}
------------------------------------
...