我在理解/使用导入的routes
的{{1}}时遇到了一些困难。该问题发生在依靠次要商店或命名商店的module
上。
假设我有两个模块routes
和entity-a
,并且entity-b
通过{em>选择器 {{1 }}在entity-a
上。
entity-b
的内容将在app-entity-b
上完美显示,但是,** entity-a.component.html
指向命名出口的链接已损坏**。
此stackblitz上的测试应用程序说明了此问题。
entity-b
。entity-a
。entity-b
。entity-b.component
正在导入entity-b-detail.component
并显示entity-a.component
,其中包含指向entity-a.componenet
的链接。entity-b.module
entity-b.component
和entity-b-detail.component
正在延迟加载。Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'entity-a/a'
正在导入组件entity-a
,并使用其选择器来显示其内容。entity-b
在调用entity-a
之前引用了entity-b
路径,则[routerLink]
组件将发生 redirect ,显示{{1 }}。但是,这不是预期的行为。entity-b
outlets
entity-b
detail
app.module
const appRoutes: Routes = [
{
path: '',
component: MainComponent
}
];
const childRoutes: Routes = [
{
path: 'entity-a',
loadChildren: './entities/entity-a/entity-a.module#EntityAModule'
},
{
path: 'entity-b',
loadChildren: './entities/entity-b/entity-b.module#EntityBModule'
},
];
const ROUTES = [...childRoutes, ...appRoutes];
@NgModule({
imports: [
BrowserModule,
FormsModule,
RouterModule.forRoot(appRoutes),
RouterModule.forChild(childRoutes)
],
declarations: [ AppComponent, MainComponent, NavComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
entity-a.module
const routeA: Routes = [
{
path: 'a',
component: EntityAComponent
}
];
@NgModule({
imports: [
CommonModule,
EntityBModule,
RouterModule.forChild(routeA)
],
declarations: [EntityAComponent],
exports: [EntityAComponent]
})
export class EntityAModule { }
entity-a.component.html
<h3>Entity A</h3>
<p>
Entity A Content
</p>
<div>
<em>Importing 'Entity B'</em>
<app-entity-b></app-entity-b>
</div>
答案 0 :(得分:1)
命名出口的路由与其他路由结合使用。当您尝试从实体-a导航到实体-b-详细信息时,它会转到路线entity-a/a/(details:detail)
,并在命名的插座中显示结果。由于找不到任何匹配项,因此会引发错误。
我已分叉您的代码并进行了更改here。
唯一相关的更改是在EntityModule
上。 routeA
必须包含路径a/detail
的引用。
entity-a.module
const routeA: Routes = [
{
path: 'a',
component: EntityAComponent,
children: [
{
path: 'detail',
component: EntityBDetailComponent,
outlet: 'details',
},
]
}
];