import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router'; import { Observable, of } from 'rxjs'; import { getToken } from 'pz-unit'; import { menuCheck } from '../shared/menu'; @Injectable() export class AuthGuard implements CanActivate, CanActivateChild { public constructor(private router: Router) { // } public canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable { if (menuCheck('link').some(x => state.url === x)) { return of(true); } else { this.router.navigate(['/404']); } } public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable { if (!!getToken()) { // 返回中没有菜单字段 if (menuCheck('link').some(x => state.url === x)) { return of(true); } else { this.router.navigate(['/404']); } } else { this.router.navigate(['/login']); return of(false); } } }