Angular Routing with Lazy Loading and Route Guards example explained for beginners

Angular Routing with Lazy Loading and Route Guards

Step 1: Setting Up Basic Routes in Angular

1. Create a New Angular Project (if you don’t have one)

ng new angular-routing-demo --routing

2. Create Components for Each Page

ng generate component home
ng generate component about
ng generate component dashboard

3. Define Routes in 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';
import { DashboardComponent } from './dashboard/dashboard.component';

//Route Configuration
const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: 'dashboard', component: DashboardComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' },
  { path: '**', redirectTo: '/home' } // wildcard route
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})

export class AppRoutingModule { }

Understanding Each Route

{ path: 'home', component: HomeComponent }
{ path: 'about', component: AboutComponent }
{ path: 'dashboard', component: DashboardComponent }
{ path: '', redirectTo: '/home', pathMatch: 'full' }
{ path: '**', redirectTo: '/home' }
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

RouterModule.forRoot(routes)

exports: [RouterModule]

4. Add Navigation Links

<nav>
  <a routerLink="/home" routerLinkActive="active">Home</a> |
  <a routerLink="/about" routerLinkActive="active">About</a> |
  <a routerLink="/dashboard" routerLinkActive="active">Dashboard</a>
</nav><router-outlet></router-outlet>
Angular Routing app showing navigation links and default Home page

Step 2: Adding Lazy Loading In Angular Routing

What Are We Going to Do?

1. Create a Lazy Loaded Module For Angular Routing

ng generate module admin --route admin --module app

What Gets Created?

/src/app/admin/
  ├── admin.module.ts
  ├── admin-routing.module.ts
  └── (components inside admin)

2. Check Your Main Routing File

const routes: Routes = [
  {
    path: 'admin',
    loadChildren: () =>
      import('./admin/admin.module').then(m => m.AdminModule)
  }
];
loadChildren: () =>
  import('./admin/admin.module').then(m => m.AdminModule)
{ path: 'home', component: HomeComponent }
{ path: 'admin', loadChildren: ... }

Quick Summary

Step 3: Creating Route Guards

What is a Route Guard?

A route guard is used to control access to routes.

What Are We Going to Do?

1. Create a Route Guard

ng generate guard auth
Which interfaces would you like to implement?
CanActivate

What Gets Created?

auth.guard.ts

2. Add Logic to the Guard

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  canActivate(): boolean {
    const isLoggedIn = false; // change this to true to allow access

    if (isLoggedIn) {
      return true;
    } else {
      alert('Access denied. Please log in.');
      return false;
    }
  }
}

What’s Happening Here?

3. Apply Guard to a Route

{ 
  path: 'dashboard', 
  component: DashboardComponent, 
  canActivate: [AuthGuard] 
}

How This Works

/dashboard

Tip

constructor(private router: Router) {}

canActivate(): boolean {
  const isLoggedIn = false;

  if (!isLoggedIn) {
    this.router.navigate(['/home']);
    return false;
  }

  return true;
}

Quick Summary

Conclusion

Leave a Comment

Your email address will not be published. Required fields are marked *