Roadmap › Angular (2 → 21) › Module: Routing and Forms
Lessons in this course (16)

13. Routing, lazy loading, guards and resolvers

Intermediate★ Must knowLesson 13 of 16
ts
export const routes: Routes = [
  { path: "", component: Home },
  { path: "orders", loadComponent: () => import("./orders/order-list").then(m => m.OrderList) },     // lazy component
  { path: "admin", canActivate: [authGuard], canMatch: [adminGuard],
    loadChildren: () => import("./admin/admin.routes").then(m => m.ADMIN_ROUTES) },                  // lazy route group
  { path: "orders/:id", component: OrderDetail, resolve: { order: orderResolver } },
  { path: "**", component: NotFound },
];

export const authGuard: CanActivateFn = () =>
  inject(AuthService).isLoggedIn() ? true : inject(Router).createUrlTree(["/login"]);

export const orderResolver: ResolveFn<Order> = route =>
  inject(OrderService).get(Number(route.paramMap.get("id")));
html
<a routerLink="/orders" routerLinkActive="active">Orders</a>
<a [routerLink]="['/orders', o.id]" [queryParams]="{ tab: 'lines' }">Open</a>
<router-outlet />

Guards: canActivate, canActivateChild, canDeactivate (unsaved changes), canMatch (choose route/lazy load), resolve. Read params: ActivatedRoute.paramMap (observable) or component input binding (withComponentInputBinding() → id = input<string>()). Preloading strategies: withPreloading(PreloadAllModules).