ng-alain自定義路由攔截

1.在app的shared目錄下新建login-guard文件夾在其新建login-guard.ts文件

import { CanActivate, CanActivateChild } from '@angular/router';
import { Observable } from 'rxjs';
import { Injector, Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { StartupService } from '@core/startup/startup.service';

@Injectable()
export class LoginGuard implements CanActivate, CanActivateChild {
    constructor(
        private router: Router,
        private injector: Injector,
        public st: StartupService,
    ) { }
    canActivate(): Observable<boolean> | Promise<boolean> | boolean {
        return this.logIn();
    }
    canActivateChild(): Observable<boolean> | Promise<boolean> | boolean {
        return this.logIn();
    }
    private logIn() {
        let token = sessionStorage.getItem('token');
        if (!token) {
            this.goTo('/passport/login');
            return false;
        } else {
            return true;
        }
    }
    private goTo(url: string) {
        setTimeout(() => this.injector.get(Router).navigateByUrl(url));
    }
}

2.打開app.module.ts在providers里面添加模塊

import { LoginGuard } from '@shared/login-guard/login-guard.module';

providers: [
    LoginGuard
],

3.打開在app下的routes目錄下的routes-routing.module.ts文件新增LoginGuard 路由攔截去掉ng-alain默認的路由攔截

import {LoginGuard } from '@shared/login-guard/login-guard.module';
const routes: Routes = [
        path: '',
        component: LayoutDefaultComponent,
        // canActivate: [SimpleGuard],
        canActivate: [LoginGuard],
        children: [
        ]
]
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容