导入模块没有路由

时间:2017-05-31 12:02:44

标签: angular

我的主要应用程序懒洋洋地加载其他模块:

//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中删除所有共享组件,并在可能的情况下将它们放入新的共享模块中。

3 个答案:

答案 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之后,它会更安全。