首頁 >web前端 >js教程 >Angular學習之路由守衛(Route Guards)淺析

Angular學習之路由守衛(Route Guards)淺析

青灯夜游
青灯夜游轉載
2021-11-04 10:14:313870瀏覽

這篇文章帶大家了解Angular中的路由守衛(Route Guards),介紹一下創建路由守衛、控制路由是否可以啟動、控制路由是否退出的方法,希望對大家有幫助!

Angular學習之路由守衛(Route Guards)淺析

環境:

  • #Angular CLI: 11.0.6

  • Angular: 11.0.7

  • Node: 12.18.3

  • npm : 6.14.6

  • #IDE: Visual Studio Code

在我們的實際的業務開發流程中,我們經常會遇到以下需求:

  • 需要限制某些URL 的可存取性,例如,對於系統管理介面,只有那些擁有管理員權限的使用者才能開啟。 【相關教學推薦:《angular教學》】

  • 當使用者處於編輯介面時,在沒有儲存就離開時,需要提示使用者是否放棄修改。

針對以上場景,Angualr使用路由守衛(Route Guards)來實現。

路由守衛(Route Guards)

1. 建立路由守衛

Angular CLI提供了命令列工具,可以快速建立路由守衛框架檔案:ng generate guard auth。執行後,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)是否可以被載入

比較常使用的是1、3,分別控制進入和退出。按照上面配置,AngularCLI自動產生如下程式碼,return true; 替換為我們實際的程式碼即可。 return false; 表示不允許跳轉,或取消離開目前頁面。

// auth.guard.ts
import { Injectable } from &#39;@angular/core&#39;;
import { CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from &#39;@angular/router&#39;;
import { Observable } from &#39;rxjs&#39;;

@Injectable({
  providedIn: &#39;root&#39;
})
export class AuthGuard implements CanActivate, CanDeactivate<unknown> {
  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
    return true;
  }
}

在canActivate方法中,我們也可以使用跳轉。如頁面判斷是否已登錄,如果沒有登錄,跳到Login頁面:

this.router.navigate([&#39;/login&#39;]);
return false;

#2. 控制路由是否可以啟動

##控制路由是否可以激活,需要定義在定義路由的地方,增加canActivate屬性。如果需要,還可以增加data屬性, 例如告訴我們的AuthGuard進入目前路由需要驗證哪些權限。 data屬性是可選的。

const routes: Routes = [
  {
    path: "page1",
    component: Page1Component,
    data: { permissions: [&#39;YourPage1Permission&#39;] },  // 传入参数给AuthGuard,可选
    canActivate: [AuthGuard]
  },
  {
    path: "page2",
    component: Page2omponent,
    data: { permissions: [&#39;YourPage2Permission&#39;] },  // 传入参数给AuthGuard,可选
    canActivate: [AuthGuard]
  }
]

3. 控制路由是否退出(離開)

#和控制路由是否可以啟動類似,在路由定義增加

canDeactivate,並制定對應的Guard守衛即可。這裡不再舉例

總結

  • 透過路由守衛(Route Guards)實現控制URL的進入與離開;

  • Angular CLI可以輔助我們建立guard檔;

更多程式相關知識,請造訪:

程式入門! !

以上是Angular學習之路由守衛(Route Guards)淺析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除