我想我根本无法理解Angular 2路由。我的应用程序中有这个结构:
const routes: Routes = [
{
path: 'login',
component: LoginViewComponent
},
{
path: 'main',
component: MainComponent,
children:
[
{
path: 'unit_list',
component: ListViewComponent
},
{
path: 'unit_info',
component: UnitInfoComponent,
children:
[
{
path: 'patient',
component: PatientDetailsComponent
}
]
}
]
},
{
path: '',
redirectTo: 'main',
pathMatch: 'full'
}
];
以下是我的app.module的样子:
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
MainModule,
routing
],
declarations: [
AppComponent,
LoginViewComponent
],
bootstrap: [AppComponent]
})
和main.module
@NgModule({
imports: [
CommonModule,
FormsModule,
RouterModule
],
declarations: [
ListViewComponent,
MainComponent,
PatientDetailsComponent,
UnitInfoComponent,
]
})
问题是我无法管理让router.navigateByUrl功能正常工作。
我在PatientDetailsComponent中有ngOnInit()函数,它检查患者是否为空,如果是,那么我称之为“this.router.navigateByUrl(”/ main / unit_info“)”,但它会在标题中抛出错误: “无法激活已激活的插座”。它在Angular 2.1.1中运行良好,但是当我升级到2.4.X时似乎没有解决我的问题。我也不确定这条路由是否正确,因为我有点迷路。
在升级到2.4.X之前,这就是我整个路由的样子:http://pastebin.com/Y377STcW
答案 0 :(得分:4)
此错误可能是令人讨厌的红鲱鱼!
您会在Chrome控制台中看到类似的内容:
core.js:1440 ERROR Error: Uncaught (in promise): Error: Cannot
activate an already activated outlet Error: Cannot activate an already
activated outlet
at RouterOutlet.activateWith (router.js:6676)
at ActivateRoutes.activateRoutes (router.js:5765)
at eval (router.js:5705)
at Array.forEach (<anonymous>)
at ActivateRoutes.activateChildRoutes (router.js:5704)
你会去检查你的路线和你的提供者和你的HTML,你不会发现任何错误。
然后突然间你会发生!
然后您将在控制台窗口中向上滚动。你会看到从屏幕顶部推出的真正错误:
core.js:1440 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'foo' of null
TypeError: Cannot read property 'foo' of null
然后查找与您的组件对应的.ts文件,单击该文件,它将带您右转到代码行并显示错误。
换句话说,路由器无法承受构建组件期间发生的错误。 ngInit
方法可能会有不同的结果 - 尚未测试过。在任何一种情况下,路由都很好: - )
答案 1 :(得分:0)
请查看https://angular.io/docs/ts/latest/guide/router.html#!#child-routing-component以获取类似示例。
我认为您应该使用RouterModule.forChild(routes)
并在@NgModule
exports: [
RouterModule
]