gpt4 book ai didi

具有多个模块的 Angular 5 路由

转载 作者:行者123 更新时间:2023-12-02 21:08:48 26 4
gpt4 key购买 nike

我在使用多个模块配置应用程序路由时遇到问题。我想将我的应用程序分离到许多模块,并在可能的情况下将它们全部路由到一个路由配置文件中。

我有 4 个模块:

  1. AppModule - 应用程序的默认根模块
  2. LoginModule - 执行登录并在 LoginComponent 上声明的模块
  3. MainModule - 一个共享模块,用于声明基本的应用布局组件,例如页眉、页脚、侧面菜单等。
  4. As400screensModule - 此模块声明应出现在应用程序布局内的组件,并通过路由选择要通过 url 和 <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/main-menu”,该菜单应使用 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>

我的ma​​in.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 {
}

对我来说问题是我需要在as400screensModule中配置as400screensRoutes,但是在app.routing.ts中我已经声明了路由对于所有应用程序。如果我删除 as400screensRoutes 我会收到错误 'router-outlet' is not a known element:来自 MainComponent.ts。我尝试使用模块并将它们导入到不同的位置,但使其工作的唯一方法是在 as400screensModule 中声明 as400screensRoutes,并在 app.routing.ts 中已定义路由。

有没有办法只在app.routing.ts中配置路由?也许我把事情复杂化了,所以希望得到反馈,表明我正在以正确的方式配置路由。

最佳答案

RouterModule导入到MainModule。因为您在 MainComponent 中使用 router-outlet,它是 MainModule

的一部分

关于具有多个模块的 Angular 5 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47536955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com