我有一个Angular 5应用程序,可以动态加载功能模块并在主路由器插座中显示其内容 . 下面的代码显示了我的基本配置:

来自根模块的app.component(主路由器插座):

<router-outlet></router-outlet>

root的路由配置(模块是从传递的URL动态加载的):

const routes: Routes = [
    { path: 'module1', loadChildren: ...},
    { path: 'module2', loadChildren: ...}
];

export const AppRoutes = RouterModule.forRoot(routes);

其中一个功能模块的示例路由:

const routes: Routes = [
    { path: 'report/:reportId', component: ReportComponent}
];

export const AppRoutes = RouterModule.forChild(routes);

和它的app.component包含另一个路由器插座:

<router-outlet></router-outlet>

这样的配置工作正常 - 如果我去mysite.com/module1,然后加载module1并且angular控制功能模块路由器,所以访问mysite.com/module1/report/2会在功能模块的路由器插座内显示ReportComponent .

我现在要做的是将TabsComponent添加到我的主模块,以便能够从几个选项卡组成页面,其中每个选项卡将包含一个特定的模块 . 我想以某种方式使用已指定的root路由,而不是手动将其重复为TabsComponent的子项,并将功能模块加载到TabsComponent的路由器插座中 .

tabs.component:

<tabs-navigation></tabs-navigation>
<router-outlet></router-outlet>

tabs.configuration(通过http在运行时动态加载):

{
    pageId: "page1",
    tabs: [{
        tabId: "tab1",
        module: "module1",
        params: "report/2"
    }, {
        tabId: "tab2",
        module: "module2"
    }]
}

root的路由配置中还有一行:

{ path: 'tabs/:pageId', component: TabsComponent}

从现在开始访问mysite.com/tabs/page1时,我想:

  • 通过http endpoints 读取page1的配置 .

  • 生成指向该页面的所有已配置选项卡的链接作为选项卡导航 .

  • 单击链接后显示选项卡's content inside the TabsComponent' s路由器插座(默认情况下应显示第一个选项卡) . 它基本上意味着将功能模块加载到该路由器插座而不是主插座 .

我的两个问题是:

  • 如何正确配置路由我提供的所有功能模块都可以作为独立页面(现在可以使用)加载,也可以作为选项卡页面中的选项卡加载 .

  • 如何为选项卡式方案生成链接,以便我可以通过导航或直接从给定的URL转到特定选项卡?我想我需要包含页面和标签ID以及模块详细信息,以使所有部件正常工作,例如mysite.com/page1/tab1/module1/report/2 .