路由
Angular Router 是官方客户端路由模块,支持嵌套路由、懒加载、路由守卫与解析器。见 Angular 基础。
配置路由
// app.routes.ts
import { Routes } from "@angular/router";
export const routes: Routes = [
{ path: "", redirectTo: "home", pathMatch: "full" },
{ path: "home", loadComponent: () => import("./home/home.component").then((m) => m.HomeComponent) },
{
path: "admin",
canActivate: [authGuard],
loadChildren: () => import("./admin/admin.routes").then((m) => m.ADMIN_ROUTES),
},
{ path: "**", loadComponent: () => import("./not-found/not-found.component").then((m) => m.NotFoundComponent) },
];
bootstrapApplication(AppComponent, {
providers: [provideRouter(routes)],
});
模板导航
<a routerLink="/home" routerLinkActive="active">首页</a>
<router-outlet />
import { Router } from "@angular/router";
constructor(private router: Router) {}
goLogin() {
this.router.navigate(["/login"]);
}
路由守卫
import { CanActivateFn, Router } from "@angular/router";
import { inject } from "@angular/core";
export const authGuard: CanActivateFn = () => {
const router = inject(Router);
const isLoggedIn = false; // 示例:应改为 AuthService 的实际逻辑
if (!isLoggedIn) {
return router.createUrlTree(["/login"]);
}
return true;
};
| 守卫 | 时机 |
|---|---|
canActivate | 进入路由前 |
canDeactivate | 离开路由前(如未保存提示) |
canMatch | 是否匹配该路由配置 |
路由参数
import { ActivatedRoute } from "@angular/router";
// 快照(仅初始化读一次)
const id = this.route.snapshot.paramMap.get("id");
// 可观察(参数变化时更新)
this.route.paramMap.subscribe((params) => { ... });
Signal 路由输入:withComponentInputBinding() 可将路由参数绑定到 input()(见 官方路由指南)。
与 Vue / React Router 对照
| Angular | Vue Router | React Router | |
|---|---|---|---|
| 出口 | <router-outlet> | <RouterView> | <Outlet /> |
| 懒加载 | loadComponent / loadChildren | 动态 import() | lazy() + Suspense |
参考文献
以下链接在编写时均可正常访问:
相关文章
生态集成
Angular 官方维护路由、HTTP、表单、动画等;UI 与状态扩展由社区与官方 Material 团队提供。涵盖官方/半官方库、常用第三方库、与 Vue/React 生态对照、选型建议与常见坑。
Signal 基础
Signals 是 Angular 16 引入的响应式原语:可读写的 signal、派生的 computed、副作用 effect。用于组件内状态与跨组件细粒度更新,涵盖 API、input signal、与变更检测的关系、最佳实践与常见坑。
RxJS 互操作
Angular 内置 RxJS 处理异步流(HTTP、HttpClient、路由事件、FormControl 的 valueChanges 等)。Signal 适合同步/短链路状态;长生命周期流仍常用 Observable。涵盖 async 管道、toSignal/toObservable、常用操作符、最佳实践与常见坑。
表单
Angular 提供 响应式表单(Reactive Forms) 与 模板驱动表单(Template-driven)。复杂表单推荐 Reactive Forms(模型在 TypeScript 中,易测试)。涵盖 FormGroup/FormArray、Typed Forms、自定义校验器、最佳实践与常见坑。
状态管理
Angular 没有强制单一状态库:服务 + DI、Signal、RxJS 即可覆盖多数场景;大型应用可选用 NgRx。涵盖选型、服务作为状态容器、跨组件共享、NgRx 与 SignalStore、常见坑。
HTTP 与数据
Angular 通过 HttpClient(@angular/common/http)发起 HTTP 请求,返回 RxJS Observable。见 RxJS 互操作、依赖注入。