這篇文章主要介紹“分析Angular路由守衛(wèi)Route Guards”,在日常操作中,相信很多人在分析Angular路由守衛(wèi)Route Guards問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”分析Angular路由守衛(wèi)Route Guards”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供德興企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為德興眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
環(huán)境:
Angular CLI: 11.0.6
Angular: 11.0.7
Node: 12.18.3
npm : 6.14.6
IDE: Visual Studio Code
在我們的實(shí)際的業(yè)務(wù)開發(fā)過程中,我們經(jīng)常會遇到如下需求:
需要限制某些 URL 的可訪問性,例如,對于系統(tǒng)管理界面,只有那些擁有管理員權(quán)限的用戶才能打開。
當(dāng)用戶處于編輯界面時(shí),在沒有保存就離開時(shí),需要提示用戶是否放棄修改。
針對以上場景,Angualr使用路由守衛(wèi)
(Route Guards)來實(shí)現(xiàn)。
1. 創(chuàng)建路由守衛(wèi)
Angular CLI提供了命令行工具,可以快速創(chuàng)建路由守衛(wèi)框架文件:ng generate guard auth
。 執(zhí)行后,Angular CLI會問我們需要實(shí)現(xiàn)哪些接口,我們直接勾選即可:
? 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)是否可以被加載
比較經(jīng)常使用的是1、3,分別控制進(jìn)入和退出。 按照上面配置,AngularCLI自動(dòng)生成如下代碼,return true;
替換為我們實(shí)際的代碼即可。return false;
表示不允許跳轉(zhuǎn),或者取消離開當(dāng)前頁面。
// auth.guard.ts import { Injectable } from '@angular/core'; import { CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate, CanDeactivate<unknown> { canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { return true; } }
在canActivate方法中,我們還可以使用跳轉(zhuǎn)。如頁面判斷是否已經(jīng)登錄,如果沒有登錄,跳轉(zhuǎn)到Login頁面:
this.router.navigate(['/login']); return false;
2. 控制路由是否可以激活
控制路由是否可以激活,需要定義在定義路由的地方,增加canActivate屬性。如果需要,還可以增加data屬性, 比如告訴我們的AuthGuard進(jìn)入當(dāng)前路由需要驗(yàn)證哪些權(quán)限。data屬性是可選的。
const routes: Routes = [ { path: "page1", component: Page1Component, data: { permissions: ['YourPage1Permission'] }, // 傳入?yún)?shù)給AuthGuard,可選 canActivate: [AuthGuard] }, { path: "page2", component: Page2omponent, data: { permissions: ['YourPage2Permission'] }, // 傳入?yún)?shù)給AuthGuard,可選 canActivate: [AuthGuard] } ]
3. 控制路由是否退出(離開)
和控制路由是否可以激活類似,在路由定義出增加 canDeactivate
,并制定相應(yīng)的Guard守衛(wèi)即可。這里不再舉例
到此,關(guān)于“分析Angular路由守衛(wèi)Route Guards”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
標(biāo)題名稱:分析Angular路由守衛(wèi)RouteGuards
新聞來源:http://jinyejixie.com/article34/pppgpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、微信小程序、網(wǎng)站改版、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)