syn*_*ror 5 angular-routing angular angular-router
我有一个 Angular 5 应用程序,它可以动态加载功能模块并在主路由器插座中显示它们的内容。下面的代码显示了我的基本配置:
来自根模块(主路由器插座)的 app.component:
<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)
root 的路由配置(模块从传递的 url 动态加载):
const routes: Routes = [
{ path: 'module1', loadChildren: ...},
{ path: 'module2', loadChildren: ...}
];
export const AppRoutes = RouterModule.forRoot(routes);
Run Code Online (Sandbox Code Playgroud)
功能模块之一的示例路由:
const routes: Routes = [
{ path: 'report/:reportId', component: ReportComponent}
];
export const AppRoutes = RouterModule.forChild(routes);
Run Code Online (Sandbox Code Playgroud)
及其包含另一个路由器插座的 app.component :
<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)
这样的配置工作正常 - 如果我去 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>
Run Code Online (Sandbox Code Playgroud)
tabs.configuration(在运行时通过 http 动态加载):
{
pageId: "page1",
tabs: [{
tabId: "tab1",
module: "module1",
params: "report/2"
}, {
tabId: "tab2",
module: "module2"
}]
}
Run Code Online (Sandbox Code Playgroud)
以及我的 root 路由配置中的附加行:
{ path: 'tabs/:pageId', component: TabsComponent}
Run Code Online (Sandbox Code Playgroud)
从现在开始访问 mysite.com/tabs/page1 时,我想:
我的两个问题是:
小智 0
@syntax_error 这就是我的做法。我对 Angular 也有类似的要求。我的应用程序有一个显示多个用户的页面,每个用户都有相应的详细视图/路线。例如
用户 A 的信息也有子状态(家庭信息、城市信息、乡村家庭都是用户 A 信息的子路由)大多数顶级路由都是这种情况。我使用 ngrx 和 mat-tab 来解决我的问题。外壳组件如下对齐。
<header></header>
<my-tab></my-tab>
<router-outlet></router-outlet>
<footer></footer>
Run Code Online (Sandbox Code Playgroud)
my-tab 组件负责监听每当选项卡列表更新时触发的可观察对象。每当可观察对象获得响应时,选项卡组件就会呈现更新的选项卡。单个选项卡表示为
{
id: unique tab id,
isActive: is tab current active,
isHomeTab: denotes if a tab is home tab or user tab
currentViewURL: current route url for this tab
timestamp: time in ms when this tab was created //used to decide the order in which tabs are created
}
Run Code Online (Sandbox Code Playgroud)
流程如下,
希望这可以帮助您或其他人决定如何继续实施选项卡。
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |