Angular 7, named router outlet 在惰性加载模块中不起作用
Angular 7, named router outlet doesn't work inside lazy loaded module
所以我遇到了著名的 angular 路由问题 "named outlet with lazy loaded module". This issue seems to be closed and this guy provided a plunker 以及我一直在关注的有效解决方案。但是我仍然遇到错误并且无法理解这个问题的本质
Error: Cannot match any routes. URL Segment:
我尝试使用 pathMatch: 'full' 和不同的重定向路由到不同的组件,但最终总是得到相同的错误。
我已经卡了几个小时了,这就是为什么决定在这里提问的原因。我的问题在哪里,我缺少什么?
我的设置
app.routing.ts:
const routes: Routes = [
{
path: '',
loadChildren: 'app/home/home.module#HomeModule',
},
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule',
},
{
path: 'data',
loadChildren: 'app/data/data.module#DataModule',
},
{
path: '**',
redirectTo: ''
}
];
app.component.html
<app-header></app-header>
<router-outlet></router-outlet>
data.routing-module.ts
const routes: Routes = [
{
path: 'summary',
component: SummaryComponent,
canActivate: [AuthGuard],
},
{
path: 'management/:id',
component: DataComponent,
canActivate: [AuthGuard],
children: [
{
path: 'activities',
component: ActivitiesComponent,
outlet: 'activities',
},
{
path: 'researches',
component: ResearchesComponent,
outlet: 'researches',
}
]
},
{
path: 'review/:id',
component: InfoComponent,
canActivate: [AuthGuard],
},
];
data.component.html
<mat-drawer-container class="docs-viewer-container">
<mat-drawer position='start' [mode]='mode'>
<router-outlet name="activities"></router-outlet>
</mat-drawer>
<mat-drawer position='end' [mode]='mode'>
<router-outlet name="researches"></router-outlet>
</mat-drawer>
<mat-drawer-content>
...
// content
...
</mat-drawer-content>
</mat-drawer-container>
因此,在用户单击 link 导航 url 路线后,数据模块的着陆页是摘要组件,如下所示:'path/data/summary?params'
。 Summary.component有导航功能
onActivitySelection(event) {
this.queryParams.offset = 0;
this.queryParams.limit = 25
this.router.navigate([{
outlets: {
'activities': '/data/management/' + event.id + '/activities'
}
}],
{
queryParams: this.queryParams
})
}
如您所见,重定向路由必须是“/data/management/:id/activities”。但是错误说找不到这条路线。
所以有人可以帮我解决我的问题吗?
尝试将模块的路由放在索引组件中。您有应用程序模块的路由器出口,但没有低于它的任何级别。
对于数据模块的路由:
{
path: '', component: DataIndexComponent, canActivate: [AuthGuard],
children: [
{
path: 'summary',
component: SummaryComponent
},
...[restOfRoutes]
]
}
在 DataIndexComponent 中添加 <router-outlet></router-outlet>
.
另一方面,如果您使用相同的身份验证保护,您可以将它放在模块的索引级别。
所以我遇到了著名的 angular 路由问题 "named outlet with lazy loaded module". This issue seems to be closed and this guy provided a plunker 以及我一直在关注的有效解决方案。但是我仍然遇到错误并且无法理解这个问题的本质
Error: Cannot match any routes. URL Segment:
我尝试使用 pathMatch: 'full' 和不同的重定向路由到不同的组件,但最终总是得到相同的错误。
我已经卡了几个小时了,这就是为什么决定在这里提问的原因。我的问题在哪里,我缺少什么?
我的设置
app.routing.ts:
const routes: Routes = [
{
path: '',
loadChildren: 'app/home/home.module#HomeModule',
},
{
path: 'admin',
loadChildren: 'app/admin/admin.module#AdminModule',
},
{
path: 'data',
loadChildren: 'app/data/data.module#DataModule',
},
{
path: '**',
redirectTo: ''
}
];
app.component.html
<app-header></app-header>
<router-outlet></router-outlet>
data.routing-module.ts
const routes: Routes = [
{
path: 'summary',
component: SummaryComponent,
canActivate: [AuthGuard],
},
{
path: 'management/:id',
component: DataComponent,
canActivate: [AuthGuard],
children: [
{
path: 'activities',
component: ActivitiesComponent,
outlet: 'activities',
},
{
path: 'researches',
component: ResearchesComponent,
outlet: 'researches',
}
]
},
{
path: 'review/:id',
component: InfoComponent,
canActivate: [AuthGuard],
},
];
data.component.html
<mat-drawer-container class="docs-viewer-container">
<mat-drawer position='start' [mode]='mode'>
<router-outlet name="activities"></router-outlet>
</mat-drawer>
<mat-drawer position='end' [mode]='mode'>
<router-outlet name="researches"></router-outlet>
</mat-drawer>
<mat-drawer-content>
...
// content
...
</mat-drawer-content>
</mat-drawer-container>
因此,在用户单击 link 导航 url 路线后,数据模块的着陆页是摘要组件,如下所示:'path/data/summary?params'
。 Summary.component有导航功能
onActivitySelection(event) {
this.queryParams.offset = 0;
this.queryParams.limit = 25
this.router.navigate([{
outlets: {
'activities': '/data/management/' + event.id + '/activities'
}
}],
{
queryParams: this.queryParams
})
}
如您所见,重定向路由必须是“/data/management/:id/activities”。但是错误说找不到这条路线。
所以有人可以帮我解决我的问题吗?
尝试将模块的路由放在索引组件中。您有应用程序模块的路由器出口,但没有低于它的任何级别。
对于数据模块的路由:
{
path: '', component: DataIndexComponent, canActivate: [AuthGuard],
children: [
{
path: 'summary',
component: SummaryComponent
},
...[restOfRoutes]
]
}
在 DataIndexComponent 中添加 <router-outlet></router-outlet>
.
另一方面,如果您使用相同的身份验证保护,您可以将它放在模块的索引级别。