我的主要应用程序懒洋洋地加载其他模块:
//main NgModule
RouterModule.forRoot(
[
{path:'profile', loadChildren:'path/to/profile.module#ProfileModule},
{path:'classroom', loadChildren:'path/to/classroom.module#ClassroomModule},
{path:'tests', loadChildren:'path/to/test.module#TestsModule}
])
现在,配置文件模块中有一些组件,它们是Classroom模块所必需的。
//Profile NgModule
RouterModule.forChild(
[
{path:'', component:ProfileComponent,
])
//Classroom NgModule
imports: [
ProfileModule,
RouterModule.forChild(
[
{path:'', component:ClassroomComponent} //this requires a component in ProfileModule
])
]
这很好地编译但是当我尝试导航到'/ classroom'时,我得到的只是ProfileComponent
我想这是因为ProfileModules路由配置与ClassroomModule路由配置相结合。有没有办法阻止这种情况发生?我不希望从ProfileModule中删除所有共享组件,并在可能的情况下将它们放入新的共享模块中。
答案 0 :(得分:6)
我发现这样做的最好方法是创建一个模块,它执行原始模块的所有声明,但不导入路由。
<Module Name>WithoutRouting.ts
然后我创建了另一个模块
<Module Name>.ts
我导入路由和<Module Name>WithoutRouting.ts
模块。
然后,当我想使用带路由的模块时,例如延迟加载时,我使用<Module Name>.ts
,如果我想直接导入模块,我使用<Module Name>WithoutRouting.ts
。
答案 1 :(得分:1)
尝试反转导入的位置
.FormulaR1C1
答案 2 :(得分:0)
我遇到了类似的问题。我发现的所有问题是,如果将已经与RouterModule组合在一起的模块放在当前模块的路由模块之前,那么如果任何路径与模式匹配,它将仅使用导入的模块的路由。因此,请确保一开始就导入了路由模块,也许是在CommonModule之后,它会更安全。