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: [
]
]