Angular Routing and Navigation

In this lesson, we'll dive into Angular's powerful routing and navigation features. You'll learn how to navigate between different views, pass data via routes, and manage route guards for controlling access to specific views.

Lets Go!

Thumbnail of Angular Routing and Navigation lesson

Angular Routing and Navigation

Lesson 4

Learn how to configure Angular routing, navigate between views, pass data between routes, and implement route guards and lazy loading.

Get Started 🍁

Angular Routing and Navigation

Welcome to Level 4 of the Angular course! Routing and navigation are core concepts when building single-page applications. This lesson will walk you through setting up routing in your Angular app, configuring navigation between views, passing data between routes, and using guards to protect routes.

By the end of this lesson, you'll have a solid understanding of how to implement navigation within your Angular applications and control access to various parts of your app.

Main Concepts of Angular Routing and Navigation

  • Setting Up Routes:

    • Use the RouterModule to define routes and link components.
    • Example:
      const routes: Routes = [
        { path: '', component: HomeComponent },
        { path: 'about', component: AboutComponent },
      ];
      
  • Navigating Between Routes:

    • Use RouterLink and routerLinkActive to navigate and highlight active links.
    • Example:
      <a routerLink="/about" routerLinkActive="active">About</a>
      
  • Passing Data Between Routes:

    • Use route parameters and query parameters to pass data between components.
    • Example:
      <a [routerLink]="['/details', item.id]">Details</a>
      
  • Route Guards:

    • Implement CanActivate and CanDeactivate guards to control access to routes.
    • Example:
      canActivate(): boolean {
        return this.authService.isAuthenticated();
      }
      
  • Lazy Loading:

    • Use lazy loading to load feature modules on demand, improving initial load times.
    • Example:
      const routes: Routes = [
        { path: 'feature', loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule) },
      ];
      

Mastering routing and navigation will empower you to build dynamic, user-friendly Angular applications with multiple views and navigation flows.

Practical Applications of Routing and Navigation

1. Simple Routing Setup

  • Create a basic routing setup with two components: HomeComponent and AboutComponent.
    const routes: Routes = [
      { path: '', component: HomeComponent },
      { path: 'about', component: AboutComponent },
    ];
    
    • Add routing configuration in app.module.ts using RouterModule.forRoot(routes).

2. Navigating with RouterLink

  • Use routerLink in templates to enable navigation between routes:
    <a routerLink="/about">Go to About</a>
    

3. Passing Parameters to Routes

  • Set up routes with parameters to pass data (e.g., item ID):
    <a [routerLink]="['/details', item.id]">View Details</a>
    
    • Access the parameter in the component:
      ngOnInit() {
        this.route.paramMap.subscribe(params => {
          const itemId = params.get('id');
        });
      }
      

4. Implementing Route Guards

  • Protect routes using CanActivate guard to check if the user is logged in:
    canActivate(): boolean {
      return this.authService.isAuthenticated();
    }
    

Test your Knowledge

1/3

What is the purpose of the CanActivate guard?

Advanced Insights into Angular Routing and Navigation

Mastering routing and navigation enables building scalable applications with advanced techniques:

  • Nested Routes:

    • Define nested routes within a parent component to handle complex views.
    • Example:
      const routes: Routes = [
        {
          path: 'products',
          component: ProductsComponent,
          children: [
            { path: 'details', component: ProductDetailsComponent },
          ],
        },
      ];
      
  • Preloading Strategy:

    • Use the PreloadAllModules strategy to preload modules in the background.
  • Query Parameters and Fragments:

    • Use query parameters and fragments for better navigation and state management.

Curiosity Question:

How can route guards help in creating secure and role-based navigation?

Additional Resources for Routing and Navigation

These resources will help deepen your understanding of routing and navigation in Angular.

Practice

Task: Set up routing for a blog app with routes for home, about, and blog detail views.

Task: Implement a CanActivate guard to protect a route that requires user authentication.

Task: Create a nested route for displaying product categories and product details.

Task: Use query parameters to filter products based on category.

Task: Implement lazy loading for a feature module that manages user profiles.

Task: Add a navigation menu with active link highlighting using routerLinkActive.