In Angular, routing and guards are powerful features that allow you to control the navigation and access to different parts of your application. Routing defines how the application's URL should map to different components, while guards protect routes by controlling whether a user can access certain routes based on specific conditions.
Here's an overview of Angular routing and guards:
Angular Routing:
Setting Up Routes: To use routing in Angular, you need to set up the routes in your application. This is typically done in the
app-routing.module.ts
file, where you define an array of route configurations. Each route configuration includes a path and the corresponding component to render when that path is accessed.typescript// app-routing.module.ts import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './home.component'; import { AboutComponent } from './about.component'; const routes: Routes = [ { path: '', component: HomeComponent }, { path: 'about', component: AboutComponent }, ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule], }) export class AppRoutingModule {}
Router Outlet: To render the components corresponding to the routes, you need to include the
<router-outlet>
element in your main component's template (usuallyapp.component.html
). This element acts as a placeholder where the components associated with the active route will be rendered.html<!-- app.component.html --> <router-outlet></router-outlet>
Angular Guards:
Angular provides several types of guards that can be used to control access to routes:
CanActivate: The
CanActivate
guard is used to determine if a user can access a particular route. It returns a boolean value or an observable/promise that resolves to a boolean. If the guard returnstrue
, the user can access the route; otherwise, if it returnsfalse
or a rejected observable/promise, the navigation is blocked.CanActivateChild: Similar to
CanActivate
, theCanActivateChild
guard is used to control access to child routes. It is applied to the parent route and affects all its child routes.CanDeactivate: The
CanDeactivate
guard is used to decide if a user can leave a route. It allows you to prompt the user with a confirmation dialog or other logic before they navigate away from the current route.CanLoad: The
CanLoad
guard is used to determine if a module can be loaded lazily. It is useful when you have feature modules that should be loaded conditionally based on certain criteria.Resolve: The
Resolve
guard is used to fetch data before a route is activated. It allows you to resolve data from a service or API and make it available to the component.
To use a guard, you need to attach it to a specific route or to the child routes in your route configuration. For example:
typescriptconst routes: Routes = [
{ path: '', component: HomeComponent, canActivate: [AuthGuard] },
{ path: 'about', component: AboutComponent, canActivateChild: [AuthGuard] },
];
In this example, the AuthGuard
is a custom guard that implements the CanActivate
interface and contains the logic to determine if a user is allowed to access the routes.
With Angular routing and guards, you can create a robust and secure navigation system for your application, allowing you to control access and protect sensitive routes from unauthorized access.