[英]Auxiliary router-outlet inside primary router-outlet
我正在嘗試在主路由器插座內使用輔助路由器插座。
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'
我嘗試使用延遲加載和命名路由器插座,並發現以下事實:
''
的父路線的子路徑。 他們不會像空路徑的孩子一樣工作。 它可能會很快修復。 <router-outlet>
,其子組件將是輔助路由和其他子路徑路線。 (可能會很快修復,與第1點相同) 您可以通過以下方式加載指定的插座:url( parentRoute/outletName:['outletPath', param]
),或使用路由器鏈接指令( [routerLink]=['parentRoutes',{outlets: {outletName:['outletPath', param]}}]
,或以編程方式( this.router.navigate(['parentRoutes',{outlets: {outletName:['outletPath', param]}}]
)
要刪除指定的插座,請在url,routerLink或代碼中指定outlets: {outletName: null}
。
由於一個錯誤(將空路徑子路徑重定向到命名路由不起作用),默認情況下目前沒有優雅的方法來加載命名路由,以后可以使用上述方法將其刪除。 它可能會很快修復。 但是,您可以使用虛擬組件創建一個空路徑,並在其構造函數中導航到加載默認命名路由的URL。 或者您可以在父組件中執行此操作。
特別感謝布蘭登
我解決了使用此路由配置:
RouterModule.forChild([
{
path: 'wrap',
component: PageComponent,
children: [
{
path: 'auxpath',
component: AuxComponent,
outlet: 'auxoutlet'
}
]
},
{
path: '',
component: PageComponent
}
])
此URL有效:
/page/wrap/(auxoutlet:auxpath)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.