亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談Angular路由守衛

2019-11-19 15:40:05
字體:
來源:轉載
供稿:網友

引言

在企業應用中權限、復雜頁多路由數據處理、進入與離開路由數據處理這些是非常常見的需求。

當希望用戶離開一個正常編輯頁時,要中斷并提醒用戶是否真的要離開時,如果在Angular中應該怎么做呢?

其實Angular路由守衛屬性可以幫我們做更多有意義的事,而且非常簡單。

什么是路由守衛?

Angular 的 Route 路由參數中除了熟悉的 pathcomponent 外,還包括四種是否允許路由激活與離開的屬性。

canActivate

控制是否允許進入路由。

canActivateChild

等同 canActivate,只不過針對是所有子路由。

canDeactivate

控制是否允許離開路由。

canLoad

控制是否允許延遲加載整個模塊。

例如:

復制代碼 代碼如下:

{ path: 'logics', loadChildren: './logics/logics.module#LogicsModule', canLoad: [ AuthGuard ] }

這四個屬性非常好理解,而且作用各自不同。然后當進入與離開能夠有效控制權時,對于前面我提到的若干問題,就可以非常好的處理。

如何創建?

四個屬性雖然名稱不同,但其基本的使用方式非常相近。四種不同守衛方式有者四個不同的接口與之相對應。

屬性名 接口名
canActivate CanActivate
canActivateChild CanActivateChild
canDeactivate CanDeactivate<TComponent>
canLoad CanLoad

canDeactivate 需要指明具體的組件類名以外,其他接口只是將首字母大寫而已。假定需要一個某個角色才能訪問某些路由,就需要一個 CanActivate 守衛類。

@Injectable()export class CanAdminProvide implements CanActivate {  constructor(private userSrv: UserService, private msg: NzMessageService) {}  canActivate(    route: ActivatedRouteSnapshot,    state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {    return new Observable((observer) => {      // 擁有 `admin` 角色      if (this.userSrv.hasRole('admin')) {        observer.next(true);        observer.complete();        return;      }      this.msg.error('授權不足');      observer.next(false);      observer.complete();    });  }}

每種接口要都需要相應的實現某個方法,就上而論,繼承 CanActivate 并實現一個叫 canActivate 的方法;且返回一個布爾類型的值。

四種類型守衛接口都返回一個布爾類型值,其實從這四種參數的名稱 can 開頭就不然理解。

最后,把它運用到相應的路由上即可,例如:

復制代碼 代碼如下:

{ path: 'admin', component: GuardAdminComponent, canActivate: [ CanAdminProvide ] }

當然,別忘記注冊 CanAdminProvide 類。

一些實踐

離開時提醒

四種守衛只有一種離開類型 canDeactivate,因此:

@Injectable()export class CanLeaveProvide implements CanDeactivate<GuardComponent> {  constructor (private confirmSrv: NzModalService) {}  canDeactivate(    component: GuardComponent,    currentRoute: ActivatedRouteSnapshot,    currentState: RouterStateSnapshot,    nextState?: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {    return new Observable((observer) => {      this.confirmSrv.confirm({        title: '確認要離開嗎?',        content: '你已經填寫了部分表單離開會放棄已經填寫的內容。',        okText: '離開',        cancelText: '取消',        onOk: () => {          observer.next(true);          observer.complete();        },        onCancel: () => {          observer.next(false);          observer.complete();        }      });    });  }}

這里返回的是一個 Observable 類型,意味者,在方法體內可以做任何事,只需要在結果中使用:

// 允許observer.next(true); // 或拒絕// observer.next(false);observer.complete();

來處理 Observable 的結果,就完成了整個流程。倘若,用戶按瀏覽器后退或路由至其他頁面時,會先收到一個提醒。

上面使用的 ng-zorro-antd 的確認對話框來提醒用戶是否需要離開,若選擇【離開】則跳轉至目標路由,反之保留當前路由狀態。


角色受限

這是再正常不過的功能,若用戶進入一個未授權的路由時,甚至是某個遲延加載模塊下所有路由;若用戶無權限時,如何提醒用戶。

此時 canActivate、canLoad 就有用了。假定管理員角色才能加載管理模塊下所有管理功能以及某個管理頁面,基于接口多繼承的特性,可以同時繼承這兩個接口。

@Injectable()export class CanAuthProvide implements CanActivate, CanLoad {  constructor(private userSrv: UserService, private msg: NzMessageService) {}  check(): Observable<boolean> {    return new Observable((observer) => {      if (this.userSrv.isLogin) {        observer.next(true);        observer.complete();        return;      }      this.msg.error('權限不足');      observer.next(false);      observer.complete();    });  }  canActivate(    route: ActivatedRouteSnapshot,    state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {    return this.check();  }  canLoad(route: Route): boolean | Observable<boolean> | Promise<boolean> {    return this.check();  }}

因此,一個類中具有兩種不同守衛的能力,更對于代碼組織也更優雅。同樣,需要運用到相應的路由當中。

{ path: 'auth', component: GuardAuthComponent, canActivate: [ CanAuthProvide ] },{ path: 'admin', loadChildren: './admin/admin.module#AdminModule', canLoad: [ CanAuthProvide ] }

此后,若一個普通員工賬號要想進入(哪怕瀏覽器地址欄錄入)未授權的路由 /auth 會提示 權限不足 的字樣。


總結

路由守衛對于權限控制非常便利,當然其粒度當然只能在頁面層級。倘若需要對按鈕粒度也只能利用指令的方式,而二者的結合可以極大的改善權限控制埋點的代碼量。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产情人节一区| 日韩欧美aaa| 国产日韩一区在线| 久久久国产91| 日本久久久久久| 久久久久久久久久久人体| 欧美黑人又粗大| 美女扒开尿口让男人操亚洲视频网站| 国产精品亚洲一区二区三区| 国产日韩欧美视频在线| 欧美午夜无遮挡| 欧美精品在线免费观看| 国产精品美乳在线观看| 永久免费看mv网站入口亚洲| 亚洲欧美国产一区二区三区| 国产一区二中文字幕在线看| 久久亚洲私人国产精品va| 51精品国产黑色丝袜高跟鞋| 精品久久久久久亚洲国产300| 亚洲精品在线91| 久久综合电影一区| 国产91精品视频在线观看| 日韩美女在线看| 日韩美女视频在线观看| 亚洲国产成人精品电影| 精品国产老师黑色丝袜高跟鞋| 成人久久一区二区三区| 欧美性在线观看| 精品亚洲精品福利线在观看| 国产精品video| 激情懂色av一区av二区av| 国产成人aa精品一区在线播放| 欧美激情在线狂野欧美精品| 国产美女搞久久| 欧美黑人性视频| 成人亚洲综合色就1024| 亚洲视频在线看| 欧美一区二区三区艳史| 亚洲无亚洲人成网站77777| 在线观看免费高清视频97| 久久久久久久91| 欧美黑人巨大精品一区二区| 国产精品久久久久久久app| 国产日产欧美a一级在线| 欧美精品激情视频| 98精品国产自产在线观看| 亚洲性视频网站| 欧美性猛交xxxx黑人| 国产91精品久久久久| 国产不卡一区二区在线播放| 岛国视频午夜一区免费在线观看| 久久免费视频这里只有精品| 午夜精品福利视频| 精品免费在线观看| 91国产精品91| 久久久久久久久久久久久久久久久久av| 精品久久久久久中文字幕一区奶水| 国产精品久久久久久av下载红粉| 狠狠色狠狠色综合日日小说| 日韩av在线免费播放| 亚洲国产成人一区| 欧美区二区三区| 91牛牛免费视频| 久久久久亚洲精品成人网小说| 亚洲一区二区三| 亚洲国产天堂久久国产91| 欧洲精品在线视频| 国产aⅴ夜夜欢一区二区三区| 成人黄色免费在线观看| 亚洲国产精品电影| 亚洲一区二区久久| 亚洲成人性视频| www.久久撸.com| www.亚洲一区| 亚洲精品免费在线视频| 欧美日韩综合视频网址| 国产成人精品999| 欧美久久久精品| 亚洲中国色老太| 欧美激情精品在线| 日韩精品极品在线观看| 欧美激情国产日韩精品一区18| 欧美日韩性视频| 日韩高清人体午夜| 亚洲欧美日韩图片| 亚洲国产欧美在线成人app| 国色天香2019中文字幕在线观看| 91欧美激情另类亚洲| 一区二区三区视频免费在线观看| 成人黄色午夜影院| 91免费视频网站| 欧美专区第一页| 亚洲精品在线观看www| 亚洲精品乱码久久久久久金桔影视| 欧美日韩国产综合视频在线观看中文| 欧美性猛交xxxx免费看久久久| 久久99久久亚洲国产| 午夜剧场成人观在线视频免费观看| 黑人巨大精品欧美一区二区三区| 亚洲免费中文字幕| 亚洲性生活视频在线观看| 日韩在线视频播放| 国产在线观看精品一区二区三区| 久久久亚洲影院你懂的| 91九色国产社区在线观看| 7777免费精品视频| 久久激情五月丁香伊人| 国产精品女人久久久久久| 91精品视频网站| xvideos成人免费中文版| 97精品视频在线观看| 高清欧美性猛交xxxx黑人猛交| 69**夜色精品国产69乱| 亚洲免费视频一区二区| 欧美最猛性xxxxx免费| 海角国产乱辈乱精品视频| 欧美大片免费观看| 亚洲欧美综合另类中字| 欧美肥臀大乳一区二区免费视频| 欧美国产在线视频| 亚洲欧美激情另类校园| 中文字幕亚洲字幕| 精品欧美激情精品一区| 亚洲激情第一页| 2021久久精品国产99国产精品| 日本欧美爱爱爱| 亚洲精选一区二区| 久热99视频在线观看| 中文字幕日韩专区| 欧美一级高清免费| 午夜免费久久久久| 黄色91在线观看| xxx成人少妇69| 日韩av资源在线播放| 久久成人综合视频| 亚洲精品国偷自产在线99热| 欧美精品一本久久男人的天堂| 亚洲综合日韩中文字幕v在线| 日韩av免费在线看| 亚洲国产女人aaa毛片在线| 黑人精品xxx一区一二区| 91性高湖久久久久久久久_久久99| 久久久久国色av免费观看性色| 国产成人自拍视频在线观看| 亚洲一区二区三区四区视频| 国产一区二区三区在线看| 亚洲精品电影在线| 欧美精品免费看| 国产mv免费观看入口亚洲| 国产精品久久久久久亚洲影视| 国产免费观看久久黄| 亚洲一区二区久久久久久| 亚洲精品国产美女| 日产日韩在线亚洲欧美| 亚洲大胆美女视频| 国产免费观看久久黄| 久久久久久久久网站| 亚洲欧美综合另类中字| 日韩性生活视频| 欧美成人精品一区二区三区| 国产精品久久视频| 亚洲人成77777在线观看网| 日韩av理论片| 欧美激情亚洲自拍|