AGENT SKILL

angular-routing

Standards for Angular Router, Lazy Loading, and Guards. Use when configuring Angular routes, lazy-loaded modules, route guards, or resolvers. (triggers: *.routes.ts, angular router, loadComponent, canActivate, resolver)

License 许可
MIT
最近更新
2026-06-24
Stars
★ 66
Forks
24

01 前言 Front Matter

name
angular-routing
description
Standards for Angular Router, Lazy Loading, and Guards. Use when configuring Angular routes, lazy-loaded modules, route guards, or resolvers. (triggers: *.routes.ts, angular router, loadComponent, canActivate, resolver)

02 资源文件 57

03 SKILL.md 正文

Routing

Priority: P0 (CRITICAL)

Principles

  • Lazy Loading: All feature routes MUST be Lazy load all features with loadComponent (standalone) or loadChildren (route file).
    • Example: { path: 'dashboard', loadComponent: () => import('./features/dashboard/dashboard.component').then(m => m.DashboardComponent) }.
  • Functional Guards: Use function-based guards (CanActivateFn) instead of class-based guards (guards are deprecated).
    • Example: export const authGuard: CanActivateFn = () => inject(AuthService).isAuthenticated() ? true : inject(Router).createUrlTree(['/login']). Register in routes: { canActivate: [authGuard] }.
  • Component Inputs: Enable withComponentInputBinding() in provideRouter(routes, withComponentInputBinding()) to define input.required<string>() in components. Angular auto-maps route params, query params, and resolve data to matching inputs.

Guidelines

  • Title Strategy: Provide a custom TitleStrategy service (extending TitleStrategy and overriding updateTitle(snapshot)) or use simple title: 'Dashboard' in route data.
  • Resolvers: Create a ResolveFn<User> (e.g., inject(UserService).getUser(route.paramMap.get('id'))) to pre-fetch critical data before navigation completes (resolve: { user: userResolver }). Avoid blocking UI too long.

Anti-Patterns

  • No logic in route config: no logic inside route config. Move guards for access control and data fetching to dedicated Guards and Resolvers.
  • No eager feature imports: Use loadComponent or loadChildren for all feature routes.

References

04 同仓库更多 Skills