gpt4 book ai didi

angular - 如何根据 Angular 2 中的条件重定向到特定路由。

转载 作者:太空狗 更新时间:2023-10-29 17:10:14 24 4
gpt4 key购买 nike

我正在创建一个 angular2-meteor 应用程序。

export const routes: Route[] = [{
path: '',
redirectTo: "login",
pathMatch: "full"
},
{
path: 'login',
component: LoginComponent
},
{
path: 'csvtemplate',
component: TemplateComponent,
canActivate: ['canActivateForLoggedIn'],
children: [{
path: '',
redirectTo: 'dashboard' <----how to add condition for multiple path
},
{
path:'dashboard',
component: DashboardComponent
},
{
path: 'csvtimeline/:month/:year',
component: CsvTimelineComponent
}, {
path: 'csvjson',
component: CsvJsonComponent
}]
}];

当我使用 LoginComponent 登录到我的应用程序时,它将转到具有三个子组件的 TemplateComponent

  • 仪表板
  • csv时间轴
  • csvjson

现在我默认将 redirectTo 设置为我的仪表板组件。但代替此重定向,我想根据登录用户配置文件重定向到 csvjson 组件或 csvtimeline 组件。

假设

如果登录用户是“Admin”,他应该是 redirectTo -> dashboard Component

如果 Login User 是“Guest”那么他应该是 redirectTo -> csvjson component

我知道我们可以在用于重定向的仪表板组件的 ngOnInit() 中执行此操作。

if (this.user && this.user.profile.role == 'Guest') {
this._router.navigate(['csvtemplate/csvjson']);
}

但我正在寻找更好的选择,这样我就不必每次都打开仪表板组件,它会直接转到 csvjson 组件。

最佳答案

这是更好的解决方案:Guard the admin feature according to Angular guide。
使用 CanActivate 钩子(Hook)步骤:

1) 添加auth-guard.service.ts文件

import { Injectable }     from '@angular/core';
import { CanActivate } from '@angular/router';
import { Router } from '@angular/router';

@Injectable()
export class AuthGuard implements CanActivate {
canActivate() {
//Your redirect logic/condition. I use this.

if (this.user && this.user.profile.role == 'Guest') {
this.router.navigate(['dashboard']);
}
console.log('AuthGuard#canActivate called');
return true;
}
//Constructor
constructor(private router: Router) { }
}

2) 更新路由文件,在我的例子中是 app.module.ts

import { AuthGuard } from './auth-guard.service';
import { AdminComponent } from './admin/admin.component';
@NgModule({
declarations: [
AppComponent,
AdminComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,

RouterModule.forRoot([
{
path: 'admin',
component: AdminComponent,
canActivate:[AuthGuard]
},
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full'
}
])
],
providers: [AuthGuard],
bootstrap: [AppComponent]
})
export class AppModule { }

**引用** https://angular.io/docs/ts/latest/guide/router.html#!#can-activate-guard

关于angular - 如何根据 Angular 2 中的条件重定向到特定路由。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40933619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com