我正在尝试在主路由器插座内使用辅助路由器插座。
app.routing
export const appRoutes: Routes = [
{ path: '', component: HomeComponent },
{
path: 'page',
loadChildren: () => new Promise(function (resolve) {
(require as any).ensure([], function (require: any) {
resolve(require('../pages/page.module').default);
});
})
}
];
app.component
@Component({
template: `<h1>My App!</h1>
<a [routerLink]="['/page']">Page</a>
<router-outlet></router-outlet>`
})
page.module
@NgModule({
imports: [
CommonModule,
RouterModule.forChild([
{
path: '',
component: PageComponent
},
{
path: 'auxpath',
component: AuxComponent,
outlet: 'auxoutlet'
}
])
],
declarations: [PageComponent],
exports: [PageComponent]
})
export default class PageModule {}
page.component
@Component({
template: `Page <router-outlet name="auxoutlet"></router-outlet>`
})
aux.component
@Component({
template: `Aux`
})
错误 / page /(auxoutlet:auxpath)会看到Page组件但出现此错误:
EXCEPTION: Uncaught (in promise): Error: Cannot find the outlet auxoutlet to load 'AuxComponent'
答案 0 :(得分:12)
我尝试使用延迟加载和命名路由器插座,并发现以下事实:
''
的父路线的子路线。他们不会像空路径的孩子一样工作。它可能会很快修复。<router-outlet>
的组件,其子组件将是辅助路由和其他儿童路线。 (可能会很快修复,与第1点相同。)您可以通过以下方式加载指定的插座:url(parentRoute/outletName:['outletPath', param]
),或使用路由器链接指令([routerLink]=['parentRoutes',{outlets: {outletName:['outletPath', param]}}]
,或以编程方式(this.router.navigate(['parentRoutes',{outlets: {outletName:['outletPath', param]}}]
)
要删除指定的插座,请在网址,路径链接或代码中指定outlets: {outletName: null}
。
由于存在错误(将空路径子路径重定向到命名路由不起作用),目前没有优雅的方法可以默认加载命名路由,以后可以使用上述方法将其删除。它可能会很快修复。但是,您可以使用虚拟组件创建一个空路径,并在其构造函数中导航到加载默认命名路由的URL。或者您可以在父组件中执行此操作。
特别感谢Brandon
答案 1 :(得分:4)
我解决了使用此路由配置:
RouterModule.forChild([
{
path: 'wrap',
component: PageComponent,
children: [
{
path: 'auxpath',
component: AuxComponent,
outlet: 'auxoutlet'
}
]
},
{
path: '',
component: PageComponent
}
])
此网址有效:
/page/wrap/(auxoutlet:auxpath)