具有多个模块的角度5路由

时间:2017-11-28 16:55:31

标签: angular

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

我有4个模块:

  1. AppModule - 应用程序的默认根模块
  2. LoginModule - 在LoginComponent上执行登录和声明的模块
  3. MainModule - 一个共享模块,用于声明基本的应用布局组件,如页眉,页脚,侧边菜单等。
  4. As400screensModule - 此模块在应用程序布局中显示的组件上声明,路由选择通过URL和<router-outlet>标记加载哪个组件。
  5. 让我们从 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的子路由加载。

    当我想在MainComponent中使用<router-outlet>标签时,问题就开始了,这个标签应该从不同的模块中加载子组件。

    我的 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 {
    }
    

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

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

1 个答案:

答案 0 :(得分:4)

RouterModule导入MainModule。因为您在MainComponent中使用的路由器插座是MainModule

的一部分