logoImagina
iconCurso
Te recomendamos nuestro curso de Angular 18
Descubre el curso de Angular 18
Ir al curso

Guía Completa del Routing en Angular

iconImage
Escrito por Equipo de Imagina
Actualizado el 10-10-2024
Duración: 15 min

En el desarrollo de aplicaciónes</b> web, la navegación y la organización de vistas son aspectos cruciales para proporcionar una experiencia de usuario fluida y coherente. Aquí es donde el routing en Angular juega un papel fundamental.

Esta guía completa te llevará paso a paso a través del proceso de configuración, implementación y optimización del sistema de enrutamiento en Angular, permitiéndote construir aplicaciones dinámicas y de una sola página (SPA) con facilidad.

Desarrollador web usando Angular

¿Qué es el Routing en Angular?

El routing en Angular es el mecanismo que permite la navegación dentro de una aplicación web. En términos simples, se trata de cómo una aplicación cambia de página sin necesidad de recargar completamente la página. Angular logra esto a través del uso de Angular Router, un módulo que proporciona herramientas y servicios necesarios para implementar el routing.

El flujo de trabajo básico del routing en Angular incluye definir rutas en el archivo de configuración, crear componentes para esas rutas y luego emplear las herramientas de Angular para navegar entre estas vistas. Este enfoque no solo facilita una navegación más suave y rápida, sino que también permite una modularización efectiva del código.

¿Por qué es importante el Routing?

El routing en Angular es vital para construir aplicaciones escalables y eficientes. Nos permite dividir nuestra aplicación en varias vistas, cada una representando diferentes estados de la aplicación. Esto no solo mejora la experiencia del usuario, sino que también facilita el mantenimiento y la expansión de la aplicación.

  • Modularidad: Permite dividir la aplicación en módulos o componentes más pequeños y manejables.
  • Rendimiento: Mejora la velocidad y eficiencia de la aplicación al cargar solo las partes necesarias.
  • SEO: Facilita la optimización para motores de búsqueda al permitir URLs amigables y bien estructuradas.
  • Experiencia de Usuario: Proporciona una navegación más rápida y fluida, mejorando significativamente la UX.

Ejemplos básicos de Routing

Vamos a ver un ejemplo sencillo de cómo configurar rutas básicas en una aplicación Angular. Supongamos que tenemos dos componentes, Home y About, y queremos navegar entre ellos.

Primero, debemos configurar las rutas en app.module.ts:

1import { NgModule } from '@angular/core'; 2import { RouterModule, Routes } from '@angular/router'; 3import { HomeComponent } from './home/home.component'; 4import { AboutComponent } from './about/about.component'; 5 6const routes: Routes = [ 7 { path: 'home', component: HomeComponent }, 8 { path: 'about', component: AboutComponent }, 9 { path: '', redirectTo: '/home', pathMatch: 'full' } // Redirige al Home por defecto 10]; 11 12@NgModule({ 13 imports: [RouterModule.forRoot(routes)], 14 exports: [RouterModule] 15}) 16export class AppRoutingModule { }

Así de simple es configurar las rutas básicas en Angular. Con esta configuración básica, podemos aprovechar al máximo las funcionalidades del routing para ofrecer una experiencia de usuario excepcional.

Configuración Inicial del Routing

Instalación de Angular Router

Para iniciar con la configuración del routing en Angular, es importante instalar Angular Router. La instalación se realiza ejecutando el comando: sh ng add @angular/router Este comando no solo instalará el router, sino también configurará los archivos necesarios para que puedas empezar a definir tus rutas. Asegúrate de verificar que Angular Router esté correctamente instalado revisando el archivo package.json y buscando la dependencia @angular/router.

Configuración de rutas en el app.module.ts

Una vez instalado Angular Router, es esencial configurar las rutas en el archivo app.module.ts. Primero, importa el módulo de routing:

1import { RouterModule, Routes } from '@angular/router';

Define tu arreglo de rutas:

1const routes: Routes = [ 2 { path: '', component: HomeComponent }, 3 { path: 'about', component: AboutComponent } 4];

Finalmente, importa y configura RouterModule en @NgModule:

1@NgModule({ 2 imports: [RouterModule.forRoot(routes)], 3 exports: [RouterModule] 4}) 5export class AppRoutingModule { }

Creación de components para las rutas

Después de configurar las rutas, el siguiente paso es crear los componentes asociados. Esto se puede hacer utilizando el CLI de Angular: javascript ng generate component Home ng generate component About Estos comandos crearán los componentes Home y About. Ahora, los componentes deben coincidir con las rutas especificadas en app.module.ts. Por ejemplo, navegando a '/about' debe renderizar el componente AboutComponent.

Rutas Hijas y Nested Routes

Definición de rutas hijas

Las rutas hijas permiten anidar rutas dentro de otras rutas, lo cual es útil para aplicaciones complejas. Para definir rutas hijas, primero necesitamos especificarlas en el arreglo de rutas: javascript const routes: Routes = [ { path: 'parent', component: ParentComponent, children: [ { path: 'child', component: ChildComponent } ]} ]; En este ejemplo, ChildComponent es una ruta hija de ParentComponent.

Ejemplos de nested routes

Las nested routes son una característica avanzada de Angular que permite manejar múltiples niveles de enrutamiento. Un ejemplo típico es una aplicación de administración de usuarios:

1const routes: Routes = [ 2 { path: 'users', component: UsersComponent, children: [ 3 { path: 'profile', component: ProfileComponent }, 4 { path: 'settings', component: SettingsComponent } 5 ]} 6];

En este caso, ProfileComponent y SettingsComponent son rutas hijas de UsersComponent. Esto permite una mayor organización y manutención del código.

Para navegar entre rutas hijas, Angular proporciona varias directivas y servicios. Una forma común es utilizar el routerLink en los templates:

1<a routerLink="/users/profile">Profile</a> 2<a routerLink="/users/settings">Settings</a>

También puedes usar el servicio Router para navegar programáticamente:

1constructor(private router: Router) {} 2 3navigateToProfile() { 4 this.router.navigate(['/users/profile']); 5}

Lazy Loading en Angular

¿Qué es Lazy Loading?

Lazy Loading es una técnica de optimización que permite cargar partes de la aplicación de forma diferida en lugar de cargar todo el contenido de una sola vez. Esto mejora considerablemente los tiempos de carga inicial y el rendimiento general del software. Con esta técnica, solamente los componentes relevantes se cargan en el momento en que son realmente necesarios. Esto puede hacer que la experiencia del usuario sea mucho más fluida.

Configuración de Lazy Loading

Para configurar Lazy Loading en Angular, primero asegúrate de tener el Angular Router instalado. Procede a definir módulos con NgModule y separa tus rutas principales de las rutas que quieres cargar de forma diferida. Supongamos que tienes un módulo llamado AdminModule. Debes configurar el app-routing.module.ts de la siguiente manera:

1 2import { NgModule } from '@angular/core'; 3import { RouterModule, Routes } from '@angular/router'; 4 5const routes: Routes = [ 6 { 7 path: 'admin', 8 loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) 9 } 10]; 11 12@NgModule({ 13 imports: [RouterModule.forRoot(routes)], 14 exports: [RouterModule] 15}) 16export class AppRoutingModule { }

En AdminModule, tendrás tu propia configuración de rutas específica para ese módulo. Esto facilita la gestión y también hace que la aplicación sea más modular.

Beneficios del Lazy Loading

Los beneficios del Lazy Loading son múltiples. En primer lugar, se reduce el tiempo de carga inicial de la aplicación. Esto es crucial para retener usuarios, ya que una carga rápida mejora la experiencia del usuario. Segundo, la técnica ayuda en la optimización de recursos del navegador, pues solo se cargan los módulos cuando son necesarios, lo que también contribuye a un mejor rendimiento en dispositivos con hardware limitado. Además, al dividir la aplicación en módulos más pequeños, es más fácil mantener y actualizar el código, lo que, a la larga, resulta en un desarrollo más ágil y menos sujeto a errores.

Guardias y Protección de Rutas

¿Qué son las guardias en Angular?

Las guardias en Angular son funciones de protección que puedes implementar para controlar el acceso a ciertas rutas en tu aplicación. Estas se utilizan para determinar si una ruta determinada puede ser activada o no, basándose en ciertas condiciones. Las guardias pueden ayudar en la autenticación, autorización y en la gestión de permisos para varias partes de la aplicación.

Implementación de CanActivate

Para implementar CanActivate, primero debes crear un servicio que implemente CanActivate guard. Este servicio definirá la lógica que determinará si una ruta puede ser activada o no. Aquí tienes un ejemplo básico:

1import { Injectable } from '@angular/core'; 2import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; 3import { AuthService } from './auth.service'; 4 5@Injectable({ providedIn: 'root' }) 6export class AuthGuard implements CanActivate { 7 constructor(private authService: AuthService, private router: Router) {} 8 9 canActivate( 10 next: ActivatedRouteSnapshot, 11 state: RouterStateSnapshot): boolean { 12 const isLoggedIn = this.authService.isLoggedIn(); 13 if (!isLoggedIn) { 14 this.router.navigate(['/login']); 15 } 16 return isLoggedIn; 17 } 18}

Después, debes aplicar esta guardia a la ruta correspondiente en tu archivo de configuración de rutas, app-routing.module.ts:

1const routes: Routes = [ 2 { path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard] } 3];

Protección de rutas con CanActivateChild

CanActivateChild se utiliza para proteger rutas hijas dentro de un módulo. Su implementación es similar a CanActivate. Aquí tienes un ejemplo de cómo hacerlo:

1import { Injectable } from '@angular/core'; 2import { CanActivateChild, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; 3import { AuthService } from './auth.service'; 4 5@Injectable({ providedIn: 'root' }) 6export class ChildAuthGuard implements CanActivateChild { 7 constructor(private authService: AuthService, private router: Router) {} 8 9 canActivateChild( 10 next: ActivatedRouteSnapshot, 11 state: RouterStateSnapshot): boolean { 12 const isLoggedIn = this.authService.isLoggedIn(); 13 if (!isLoggedIn) { 14 this.router.navigate(['/login']); 15 } 16 return isLoggedIn; 17 } 18}

En app-routing.module.ts, aplicas la guardia CanActivateChild a las rutas hijas:

1const routes: Routes = [ 2 { 3 path: 'admin', 4 component: AdminComponent, 5 canActivateChild: [ChildAuthGuard], 6 children: [ 7 { path: 'settings', component: SettingsComponent }, 8 { path: 'users', component: UsersComponent } 9 ] 10 } 11];

Conviertete en un experto de Angular

En este tutorial, hemos explorado los fundamentos del routing en Angular, desde la configuración básica hasta las funcionalidades avanzadas. Con este conocimiento, estás equipado para construir aplicaciones web más eficientes y escalables.

Si deseas profundizar y perfeccionar tus habilidades en Angular, te recomendamos inscribirte en nuestro curso de Angular para empresas. Este curso te proporcionará las herramientas y conocimientos necesarios para convertirte en un experto en esta herramienta.

Por último, te invitamos a explorar los mejores cursos para empresas y descubrir la formación que mejor se adapte a las necesidades de tu organización.

Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *
Tutoriales relacionados
Listado de Todas las Versiones de .NET
Explora en profundidad todas las versiones de .NET, desde su creación hasta las últimas actualizaciones
Cómo hacer una Aplicación de Blog con Angular y Node.js
Descubre cómo crear tu propia aplicación de blog con Angular y Node.js. Aprende a desarrollar y deslumbra con tus habilidades de programación.
¿Qué es el Web Scraping y Cómo Funciona?
Aprende qué es el web scraping y cómo se utiliza y descubre cómo recopilar información en línea para análisis de datos o investigación.
Listado de Todas las Versiones de Angular
Descubre Todas las Versiones del Framework para Aplicaciones Web, Angular: Desde la Primera Versión (AngularJS) hasta la Última (Angular 18)
Angular: Funcionalidades, Novedades y mucho más
angular
artículo
Descubre todo sobre Angular, el framework de desarrollo web que facilita la creación de aplicaciones dinámicas y eficientes.
Descubre
Tabla de contenido
¿Qué es el Routing en Angular?
¿Por qué es importante el Routing?
Ejemplos básicos de Routing
Configuración Inicial del Routing
Instalación de Angular Router
Configuración de rutas en el app.module.ts
Creación de components para las rutas
Rutas Hijas y Nested Routes
Definición de rutas hijas
Ejemplos de nested routes
Navegación entre rutas hijas
Lazy Loading en Angular
¿Qué es Lazy Loading?
Configuración de Lazy Loading
Beneficios del Lazy Loading
Guardias y Protección de Rutas
¿Qué son las guardias en Angular?
Implementación de CanActivate
Protección de rutas con CanActivateChild
Conviertete en un experto de Angular
Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *