Angular 5 在延迟加载模块之间共享组件破坏了路由

标签 angular angular2-routing lazy-loading

我正在使用带有多个模块的 Angular 5 开发一些大型应用程序。每个模块都按照 Angular 5 的延迟加载机制进行加载。 我在这些模块之间共享组件,并且它们工作正常。 但我在加载模块根目录时遇到问题,如下所示。

应用模块路由

export const routes: Routes = [

  { path: '', component: MenuComponent },
  { path: 'logout', component: LogoutComponent },
  { path: 'admin', loadChildren: 'app/modules/admin/admin.module#AdminModule' },
  { path: 'sample', loadChildren: 'app/modules/sample/sample.module#SampleModule' },
  { path: 'membership', loadChildren: 'app/modules/membership/membership.module#MembershipModule' },
  { path: 'class', loadChildren: 'app/modules/class/class.module#ClassModule' },

  { path: '**', component: PageNotFoundComponent }

];

我在 AdminModule 的 ClassModule 中共享组件。

类模块

@NgModule({
  imports: [
    CommonModule,
    SharedModule,
    ClassRoutingModule,
    FormsModule,
    ReactiveFormsModule
  ],
  declarations: [
    ClassRoutingComponents,
    ClassHomeComponent,
    ClassListComponent,
    ClassCalendarComponent,
    AddNewCalssComponent,
    ClassScheduleComponent
  ],
  exports: [
    ClassRoutingComponents,
    ClassHomeComponent,
    ClassListComponent,
    AddNewCalssComponent,
    ClassScheduleComponent
  ],
  providers: [

  ]
})
export class ClassModule {}

AdminModule 已导入 ClassModule,如下所示。

@NgModule({
  imports: [
    CommonModule,
    SharedModule,
    FormsModule,
    ClassModule
  ],
  declarations: [
    AdminRoutingComponents,
    .......
  ],
  providers:
    [
      AdminService,

    ]
})

export class AdminModule { }

类路由

const routes: Routes = [
  { path: '', component: ClassHomeComponent }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})

管理路由

const routes: Routes = [
  { path: '', component: AdminHomeComponent },
  { path: 'settings', component: SettingsComponent },
...
}

每个组件都共享工作正常,但我的问题是当我路由到 http://localhost:4200/admin 时,它会加载 ClassHomeComponent 但它必须加载 AdminHomeComponent

最佳答案

ClassModule 导入 ClassRoutingModuleAdminModule 导入 ClassModule

因此,当您延迟加载AdminModule(通过loadChildren:'app/modules/admin/admin.module#AdminModule')时,路由器将从ClassModule 首先,并尊重它们。因此,您的 /admin 路由正在加载 ClassRoutingModule (ClassHomeComponent)

中为 root 定义的组件

关于Angular 5 在延迟加载模块之间共享组件破坏了路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756122/

相关文章:

jquery - 加载html,然后在Jquery中使用Ajax加载图像

angular - 为什么 templateUrl 不起作用?

angular - 如何使用 Angular 6 在单个组件中渲染多个 ag-grid

Angular 2 表单 valueChanges 连续触发

angular - Angular2中LocationStrategy实例化时出错

angular - 如何在angular2中的每个路由更改上调用一个函数

Angular - 如何检查待处理的请求?

javascript - Angular 2 Child Routing (v3) 'Cannot read property ' 注释' of undefined'

hibernate - <h :selectOneMenu> and lazy loading from hibernate

jquery - 知道为什么我的 Lazyload 不工作吗?