关于使用版本3.0.0-rc.1的Angular 2路由器,我有一个小问题.我想根据用户角色(例如AdminComponent或UserComponent)导航到不同的主组件.任何人都可以帮助修改以下路线,以便我可以实现所需的功能吗?
{path: 'login',component: LoginComponent},// <--- This redirects to '/' in case user is logged in { path: '',component: HomeComponent,canActivate: [AuthGuardService],// <--- Check if user is logged in,else redirect to login children: [ { path: '',component: AdminComponent // <--- Want to navigate here if user role is 'admin' },{ path: '',component: UserComponent // <--- Want to navigate here if user role is 'user' } ] }
AuthGuardService.ts
import {Injectable} from "@angular/core"; import {CanActivate,Router,ActivatedRouteSnapshot,RouterStateSnapshot} from "@angular/router"; import {AuthService} from "./auth.service"; @Injectable() export class AuthGuardService implements CanActivate { constructor(private authService: AuthService,private router: Router) { } canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot) { if (this.authService.isLoggedIn()) { return true; } // Store the attempted URL for redirecting this.authService.redirectUrl = state.url; // Navigate to the login page with extras this.router.navigate(['/login']); return false; } }
AuthService.ts
import {Injectable} from "@angular/core"; @Injectable() export class AuthService { redirectUrl: string; logout() { localStorage.clear(); } isLoggedIn() { return localStorage.getItem('token') !== null; } isAdmin() { return localStorage.getItem('role') === 'admin'; } }
谢谢.
解决方法
问题是你不能有两条路径相同的路线.您可以做的最简单的更改是将路径更改为以下内容:
{ path: 'admin',component: AdminComponent },{ path: 'user',component: UserComponent }
这可能是最佳选择,因为您希望组件根据用户角色而不同.您可能还希望其他组件不同,您可以通过将子项添加到管理员或用户路由来轻松完成.
在您的AuthGuard中,您仍然只返回true,但是您为管理员和用户路由制作了另外两个警卫.检查用户是否是管理员.
然后通过检查用户角色,然后在您执行router.navigate([‘/ admin’])或router.navigate([‘/ user’])的组件中重定向到正确的路由