Angular 路由守卫

我们在开发的过程中,经常会遇到需要某些权限才能进入的页面,这时後就会需要路由守卫的机制啦,
而它最常用在登入画面时


快速建立

Angular CLI 提供了命令列工具,可以快速建立路由守卫框架档案:

ng generate guard auth

ng g g auth

官网介绍:guard

执行後,Angular CLI 会问我们需要实现哪些介面,我们直接勾选即可

? Which interfaces would you like to implement? (Press <space> to select, <a> to toggle all, <i> to invert selection)
>(*) CanActivate
 ( ) CanActivateChild
 ( ) CanDeactivate
 ( ) CanLoad
  • CanActivate: 控制路由是否可以启用
  • CanActivateChild: 控制子路由是否可以启用
  • CanDeactivate: 控制路由是否可以退出
  • CanLoad: 控制模组(module)是否可以被载入

建立完後 会生成一只 auth.guard.ts

import { Injectable } from "@angular/core";
import {
  ActivatedRouteSnapshot,
  CanActivate,
  RouterStateSnapshot,
  UrlTree,
} from "@angular/router";
import { Observable } from "rxjs";

@Injectable({
  providedIn: "root",
})
export class AuthGuard implements CanActivate {
  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ):
    | Observable<boolean | UrlTree>
    | Promise<boolean | UrlTree>
    | boolean
    | UrlTree {
    // 条件若符合的话 就能成功跳转
    return true;
  }
}

接着我们就可以在在这页设定是否让页面跳转


在 router 里启用路由

const routes: Routes = [
  {
    path: "login",
    component: LoginComponent,
  },
  {
    path: "",
    component: HomeComponent,
    canActivate: [AuthGuard], // 启用路由
  },
  {
    path: "",
    pathMatch: "full",
    redirectTo: "/",
  },
];

基本设定大概是这样,明天就来介绍如何使用范例吧!


<<:  失误的修补智慧

>>:  Day-21 面试考古题破解区(3)

javascript变数与运算子1

注:只要属性的开头跟结束之间没有打上任何的文字,就可以将属性合并成一个,例如< hr/ >...

【Day 02】从零开始的 Line Chatbot 系统-序章 Part 2

认识一些软件开发的专业术语 在做软件专案的时候,常常会看到一些英文简写,像是 Day 01 讲到的 ...

轻松小单元 - 偶尔的急件,大陆厂牌产品禁用

这下还能不能到对面去发展呀(误 约莫去年底、今年初,正当大家都在与资安法交战时, 突然上头发布”禁用...

知识工作者的管理

在上一篇我分享过我对「工作的意义与价值」的观察。读过後,你该不难理解为何当年 Jack Welch...

[Day 23] -『 GO语言学习笔记』- 复合型别 - 阵列(Array) (I)

以下笔记摘录自『 The Go Workshop 』。接下来会依序介绍到Golang的集合型别,「阵...