我面临着使用多个模块配置应用程序路由的问题。如果可能,我希望将我的应用程序分离到多个模块,并将它们全部路由到一个路由配置文件中。
我有四个模块:
<router-outlet>标记选择要加载的组件。让我们从我的app.routing.ts文件开始
export const routes: Routes = [
{ path: '', component: LoginComponent, pathMatch: 'full' },
{ path: 'app', component: MainComponent, canActivate: [OLAuthGuard],
children: [
{ path: 'inventory-and-purchasing-menu', component: InventoryAndPurchasingMenuComponent },
{ path: 'main-menu', component: MainMenuComponent },
{ path: 'inventory-management', component: InventoryManagementComponent },
{ path: 'items', component: ItemsComponent },
]
},
];
@NgModule({
imports: [
NgbModule,
FormsModule,
CommonModule,
RouterModule.forRoot(routes),
],
declarations: [
],
exports: [RouterModule],
providers: [],
bootstrap: []
})
export class AppRoutingModule {
}我的app.component.html
<router-outlet></router-outlet>
<app-preloader></app-preloader>首先,路由器应该转到登录页面,在成功登录后,导航到‘/app/主菜单’,该菜单应该使用MainMenuComponent从子路由加载。
当我想要在<router-outlet>中使用MainComponent标记时,问题就开始了,它应该从不同的模块加载子组件。
我的MainComponent.html
<app-header></app-header>
<div class="ol-body">
<app-side-menu></app-side-menu>
<div class="container">
<router-outlet></router-outlet>
</div>
</div>
<app-footer></app-footer>我的main.module.ts
@NgModule({
imports: [
NgbModule,
FormsModule,
CommonModule,
As400screensModule,
MfrpcModule
],
declarations: [HeaderComponent, FooterComponent, OLSideMenuComponent,
BreadcrumbsComponent, PreloaderComponent, MainComponent, TestComponent, TestChildComponent],
exports: [ HeaderComponent, FooterComponent, OLSideMenuComponent,
BreadcrumbsComponent, PreloaderComponent, MainComponent,TestComponent, TestChildComponent],
providers: [],
bootstrap: []
})
export class MainModule {
}我的as400screens.Module.ts
export const as400screensRoutes: Routes = [
{path: 'inventory-and-purchasing-menu', component: InventoryAndPurchasingMenuComponent},
{path: 'main-menu', component: MainMenuComponent},
{path: 'inventory-management', component: InventoryManagementComponent},
{path: 'items', component: ItemsComponent},
];
@NgModule({
imports: [
NgbModule,
FormsModule,
CommonModule,
RouterModule.forChild(as400screensRoutes)
],
declarations: [
MainMenuComponent,
InventoryManagementComponent,
ItemsComponent,
InventoryAndPurchasingMenuComponent
],
exports: [
RouterModule,
MainMenuComponent,
InventoryManagementComponent,
ItemsComponent,
InventoryAndPurchasingMenuComponent],
providers: [],
bootstrap: []
})
export class As400screensModule {
}我的app.module.ts
@NgModule({
declarations: [AppComponent],
imports: [
AppRoutingModule, // default app routing module
LoginModule,
MainModule,
BrowserModule,
FormsModule,
HttpClientModule,
CommonModule,
AngularWebStorageModule,
NgbModule.forRoot(),
],
exports: [],
providers: [OLConfig, OLHttpService, OLUtils, OLAppService, OLAuthGuard, OLAuthGuardService, OLConstants],
bootstrap: [AppComponent],
})
export class AppModule {
}我的问题是,我需要在as400screensRoutes中配置as400screensModule,但是在app.routing.ts中,我已经声明了all应用程序的路由。如果我删除了MainComponent.ts.,我将从as400screensRoutes中得到错误'router-outlet' is not a known element:我试着使用模块并在不同的地方导入它们,但使其工作的唯一方法是在as400screensRoutes中使用app.routing.ts中已经定义的路由在as400screensModule中声明app.routing.ts。
是否有一种仅在app.routing.ts中配置路由的方法?也许我已经把事情复杂化了,所以希望得到反馈,我正在以正确的方式配置路由。
发布于 2017-11-28 17:17:17
将RouterModule导入到MainModule。因为您在MainComponent中使用路由器出口,这是MainModule的一部分。
https://stackoverflow.com/questions/47536955
复制相似问题