Angular 的路由守卫(Routing Guards)是保护路由的重要机制,它允许我们在路由导航之前执行一些逻辑检查,例如验证用户是否已登录、是否有权限访问某个路由等。

基本概念

  • CanActivate: 控制路由是否可以被激活。
  • CanActivateChild: 控制嵌套路由是否可以被激活。
  • CanDeactivate: 控制路由是否可以被注销。
  • Resolve: 在激活路由之前获取数据。

创建路由守卫

首先,我们需要创建一个路由守卫类:

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): boolean {
    // 这里可以添加你的认证逻辑
    if (this.isAuthenticated()) {
      return true;
    } else {
      this.router.navigate(['/login']);
      return false;
    }
  }

  private isAuthenticated(): boolean {
    // 实现你的认证逻辑
    return false;
  }
}

使用路由守卫

接下来,在路由配置中使用这个守卫:

const routes: Routes = [
  {
    path: 'dashboard',
    component: DashboardComponent,
    canActivate: [AuthGuard]
  },
  // 其他路由...
];

进阶使用

  • CanActivateChild: 对于嵌套路由,我们可以使用 CanActivateChild 守卫。
  • Resolve: 在激活路由之前获取数据,可以使用 Resolve 守卫。

图片示例

Angular Routing

更多关于 Angular 路由的信息,请访问我们的Angular 路由教程