Angular 2 (RC6) - 启动组件中的路由不起作用
Angular 2 (RC6) - Routing in the startup component doesn'n work
在我的实际应用程序中,我想检查启动组件(通常 app.component.ts)是否对用户进行了身份验证。如果没有,我想将它们路由到登录组件。但是路由在这里不起作用。
我创建了一个简单的 Plunker 示例,它是可重现的:
- 打开live example
- 单击按钮 "navigate to sample 1" --> 一切正常
- 但是您可以看到,我在
app/app.component.ts
中已经有相同的路由命令 - 但应用程序不会路由到组件。为什么??
感谢您的帮助!
如果你用 setTimeout()
包装它就可以正常工作
setTimeout(() => {
this.router.navigate(["/sample1", "2"]);
});
默认路由似乎是在您调用 router.navigate()
之后发生的,因此没有生效。
我确信有更好的方法来实现相同的效果而不是 setTimout()
,但我认为证明这个问题很好。
例如,这会导致相同的行为
RouterModule.forRoot([
{ path: "", redirectTo: '/sample1/2', pathMatch: 'full' }
{ path: "sample1/:param1", component: Sample1Component },
{ path: "**", component: HomeComponent }
])
您还可以为默认路由使用 canActivate
守卫,并在那里执行 router.navigate()
。
在我的实际应用程序中,我想检查启动组件(通常 app.component.ts)是否对用户进行了身份验证。如果没有,我想将它们路由到登录组件。但是路由在这里不起作用。
我创建了一个简单的 Plunker 示例,它是可重现的:
- 打开live example
- 单击按钮 "navigate to sample 1" --> 一切正常
- 但是您可以看到,我在
app/app.component.ts
中已经有相同的路由命令 - 但应用程序不会路由到组件。为什么??
感谢您的帮助!
如果你用 setTimeout()
包装它就可以正常工作
setTimeout(() => {
this.router.navigate(["/sample1", "2"]);
});
默认路由似乎是在您调用 router.navigate()
之后发生的,因此没有生效。
我确信有更好的方法来实现相同的效果而不是 setTimout()
,但我认为证明这个问题很好。
例如,这会导致相同的行为
RouterModule.forRoot([
{ path: "", redirectTo: '/sample1/2', pathMatch: 'full' }
{ path: "sample1/:param1", component: Sample1Component },
{ path: "**", component: HomeComponent }
])
您还可以为默认路由使用 canActivate
守卫,并在那里执行 router.navigate()
。