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 {}
...