FORMA

路由

Angular Router 是官方客户端路由模块,支持嵌套路由、懒加载、路由守卫与解析器。见 Angular 基础

配置路由

ts
// 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) },
];
ts
bootstrapApplication(AppComponent, {
  providers: [provideRouter(routes)],
});

模板导航

html
<a routerLink="/home" routerLinkActive="active">首页</a>
<router-outlet />
ts
import { Router } from "@angular/router";

constructor(private router: Router) {}

goLogin() {
  this.router.navigate(["/login"]);
}

路由守卫

ts
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是否匹配该路由配置

路由参数

ts
import { ActivatedRoute } from "@angular/router";

// 快照(仅初始化读一次)
const id = this.route.snapshot.paramMap.get("id");

// 可观察(参数变化时更新)
this.route.paramMap.subscribe((params) => { ... });

Signal 路由输入:withComponentInputBinding() 可将路由参数绑定到 input()(见 官方路由指南)。

与 Vue / React Router 对照

AngularVue RouterReact Router
出口<router-outlet><RouterView><Outlet />
懒加载loadComponent / loadChildren动态 import()lazy() + Suspense

参考文献

以下链接在编写时均可正常访问:

资料说明
路由与导航官方
路由守卫鉴权
懒加载代码分割

Series

angular

10 / 14