ANG_FRONT

Capítulo 8.1. Routing en Angular

Objetivo de la práctica

Duración aproximada

Instrucciones


ng add @angular/router
  1. Importar el módulo de rutas:

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 { }
  1. Creación de componentes:

ng generate component home
ng generate component about 
  1. Uso del router outlet:

<nav>
  <a routerLink="/home">Home</a>
  <a routerLink="/about">About</a>
</nav>
<router-outlet></router-outlet>
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']);
  }
}
  1. Definir una ruta con parámetros:

const routes: Routes = [
  { path: 'user/:id', component: UserComponent },
];

  1. Acceder a los parámetros en el componente:

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')!;
  }
}


const routes: Routes = [
  {
    path: 'products',
    component: ProductsComponent,
    children: [
      { path: 'details/:id', component: ProductDetailsComponent },
      { path: 'reviews', component: ProductReviewsComponent },
    ]
  }
];

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] }