关于 angular-router
Angular Router 参考技能,涵盖现代路由配置,以及导航、守卫、数据加载和延迟加载实践,适用于构建 Angular 单页应用的开发者。
主要功能
- 01函数式守卫与解析器
- 02通过组件绑定传递路由输入
- 03使用 provideRouter 配置路由
- 04延迟加载路由
- 05预取路由数据
- 06用通配路由处理 404 页面
适用场景
- 01保护延迟加载路由
- 02将路由参数传给组件
- 03在显示路由前获取数据
- 04配置未找到页面
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-router安装后在 Claude Code 中输入/angular-router确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md详细介绍
@angular/router
版本: Angular 21(2025) 标签: 路由、导航、守卫、延迟加载、SPA
参考: 文档 — 官方路由指南 • API • GitHub
API 变更
本节记录近期特定版本的 API 变更。
-
新增:函数式守卫和解析器 — 优先使用函数式方法,而非基于类的守卫 来源
-
新增:路由器输入 — 通过路由输入向组件传递数据的新方式 来源
-
新增:withComponentInputBinding — 启用从路由参数绑定组件输入
-
新增:路由器快照改进 — 更好地保障路由参数的类型安全
-
新增:provideRouter() — 使用函数式提供程序配置现代路由器
-
已弃用:RouterModule.forRoot() — 在现代应用中使用 provideRouter()
最佳实践
- 对功能模块使用延迟加载 — 将初始包大小减少 50-70%
const routes: Routes = [
{
path: 'dashboard',
loadChildren: () => import('./dashboard/dashboard.routes').then(m => m.DASHBOARD_ROUTES)
}
];
- 优先使用函数式守卫,而非基于类的守卫
// ✅ Modern functional guard
const authGuard = () => {
const authService = inject(AuthService);
const router = inject(Router);
if (authService.isAuthenticated()) {
return true;
}
return router.createUrlTree(['/login']);
};
// ❌ Avoid class-based guards for new code
// @Injectable() export class AuthGuard implements CanActivate { ... }
- 对延迟加载的路由使用 CanMatch 守卫 — 防止未经授权的代码下载
{
path: 'admin',
canMatch: [authGuard],
loadComponent: () => import('./admin/admin.component').then(m => m.AdminComponent)
}
- 使用解析器预取数据 — 消除加载动画
{
path: 'user/:id',
resolve: { user: userResolver }
}
// In component
@Component({})
export class UserComponent {
private route = inject(ActivatedRoute);
// Modern way
user = input.required<User>();
// Legacy way
ngOnInit() {
this.route.data.subscribe(data => {
this.user = data['user'];
});
}
}
- 使用路由器输入以提高类型安全性
// app.config.ts
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes, withComponentInputBinding())
]
};
// Component receives route params as inputs
@Component({})
export class UserComponent {
@Input() id!: string;
}
- 使用通配符路由处理 404 页面
{
path: '**',
component: NotFoundComponent
}
- 使用 PreloadAllModules 在后台加载
provideRouter(routes, withPreloading(PreloadAllModules))
- 使用 routerLink 进行导航 — 保持 SPA 行为
// ✅ Correct
<a routerLink="/dashboard">Dashboard</a>
// ❌ Wrong - causes full page reload
<a href="/dashboard">Dashboard</a>
- URL 路径使用 kebab-case — 保持命名规范一致
// ✅ Good
{ path: 'user-profile', ... }
// ❌ Avoid
{ path: 'userProfile', ... }
评论
支持 Markdown