Angular 命名的路由器出口没有按预期工作
Angular named router outlet doesn't work as expected
我有一个具有以下路由结构的 angular 项目,从应用程序根目录开始:
// app-routing.module.ts
const routes: Routes = [
{
path: 'admin',
loadChildren: () => import('./features/admin/admin.module').then((m) => m.AdminModule)
},
];
// Import and export...
// admin-rounting.module.ts
const routes: Routes = [
{
path: 'admin',
component: ShellComponent,
children: [
{
path: 'editor',
loadChildren: () => import('./editor/editor.module').then((m) => m.EditorModule),
},
],
},
];
// Import and export...
// editor-routing.module.ts
const routes: Routes = [
{
path: '',
component: EditorComponent,
},
{
path: 'view-profile',
component: ViewProfileComponent,
outlet: 'profile',
},
{
path: 'edit-profile',
component: EditProfileComponent,
outlet: 'profile',
},
];
// Import and export...
它位于 AppComponent
中的根插座,之后 ShellComponent
包含另一个路由器插座,该插座作为内容传递给 SidebarComponent
,显示在 mat-sidenav-content
中,像这样:
// app.component.html
<router-outlet><router-outlet>
// shell.component.html
<sidebar>
<router-outlet outlet></router-outlet>
</sidebar>
// sidebar.component.html
<mat-sidenav-content>
<div class="content">
<ng-content select="[outlet]"></ng-content>
</div>
</mat-sidenav-content>
因此,当我导航到 /admin/editor
时,一切都按预期工作:我可以看到 ShellComponent
并且 EditorComponent
显示在正确的位置。问题始于 EditorComponent
。该组件包含一个 <profile></profile>
,我想在其中使用名为 profile
的出口显示 <view-profile></view-profile>
或 <edit-profile></edit-profile>
组件(如您在 EditorRoutingModule
配置中所见。这里的代码:
// editor.component.html
<profile></profile>
// profile.component.html
<router-outlet name="profile"></router-outlet>
// profile.component.ts
ngOnInit(): void {
this.router.navigate([{ outlets: { profile: ['view-profile'] } }], { relativeTo: this.route });
}
ProfileComponent
已加载,但我没有看到 <view-profile></view-profile>
,如我所料。检查 HTML 我可以在预期的位置看到配置文件出口。
有什么建议吗?
不得不像这样将路径 属性 留空..
{ path: '', component: ViewProfileComponent, outlet: 'view-profile', pathMatch: 'full' }
我让它工作了,但我不知道它是否应该像这样或者它是否是一种解决方法。无论如何,我给了 path
到 EditorRoutingModule
的根,并将命名路由添加为它的子路由,如下所示:
const routes: Routes = [
{
path: 'outlets',
component: EditorComponent,
children: [
{ path: 'view-profile', component: ViewProfileComponent, outlet: 'profile' },
{ path: 'edit-profile', component: EditProfileComponent, outlet: 'profile' },
],
},
{ path: '', redirectTo: 'outlets', pathMatch: 'full' },
];
我不太喜欢它,因为我的路线看起来像 /admin/editor/outlets/(profile:edit-profile)
,如果路线中没有 /outlets/
部分,是否可以达到相同的结果?
我有一个具有以下路由结构的 angular 项目,从应用程序根目录开始:
// app-routing.module.ts
const routes: Routes = [
{
path: 'admin',
loadChildren: () => import('./features/admin/admin.module').then((m) => m.AdminModule)
},
];
// Import and export...
// admin-rounting.module.ts
const routes: Routes = [
{
path: 'admin',
component: ShellComponent,
children: [
{
path: 'editor',
loadChildren: () => import('./editor/editor.module').then((m) => m.EditorModule),
},
],
},
];
// Import and export...
// editor-routing.module.ts
const routes: Routes = [
{
path: '',
component: EditorComponent,
},
{
path: 'view-profile',
component: ViewProfileComponent,
outlet: 'profile',
},
{
path: 'edit-profile',
component: EditProfileComponent,
outlet: 'profile',
},
];
// Import and export...
它位于 AppComponent
中的根插座,之后 ShellComponent
包含另一个路由器插座,该插座作为内容传递给 SidebarComponent
,显示在 mat-sidenav-content
中,像这样:
// app.component.html
<router-outlet><router-outlet>
// shell.component.html
<sidebar>
<router-outlet outlet></router-outlet>
</sidebar>
// sidebar.component.html
<mat-sidenav-content>
<div class="content">
<ng-content select="[outlet]"></ng-content>
</div>
</mat-sidenav-content>
因此,当我导航到 /admin/editor
时,一切都按预期工作:我可以看到 ShellComponent
并且 EditorComponent
显示在正确的位置。问题始于 EditorComponent
。该组件包含一个 <profile></profile>
,我想在其中使用名为 profile
的出口显示 <view-profile></view-profile>
或 <edit-profile></edit-profile>
组件(如您在 EditorRoutingModule
配置中所见。这里的代码:
// editor.component.html
<profile></profile>
// profile.component.html
<router-outlet name="profile"></router-outlet>
// profile.component.ts
ngOnInit(): void {
this.router.navigate([{ outlets: { profile: ['view-profile'] } }], { relativeTo: this.route });
}
ProfileComponent
已加载,但我没有看到 <view-profile></view-profile>
,如我所料。检查 HTML 我可以在预期的位置看到配置文件出口。
有什么建议吗?
不得不像这样将路径 属性 留空..
{ path: '', component: ViewProfileComponent, outlet: 'view-profile', pathMatch: 'full' }
我让它工作了,但我不知道它是否应该像这样或者它是否是一种解决方法。无论如何,我给了 path
到 EditorRoutingModule
的根,并将命名路由添加为它的子路由,如下所示:
const routes: Routes = [
{
path: 'outlets',
component: EditorComponent,
children: [
{ path: 'view-profile', component: ViewProfileComponent, outlet: 'profile' },
{ path: 'edit-profile', component: EditProfileComponent, outlet: 'profile' },
],
},
{ path: '', redirectTo: 'outlets', pathMatch: 'full' },
];
我不太喜欢它,因为我的路线看起来像 /admin/editor/outlets/(profile:edit-profile)
,如果路线中没有 /outlets/
部分,是否可以达到相同的结果?