【问题标题】:Angular 7 multiple router outlets for a dashboard app用于仪表板应用程序的 Angular 7 多个路由器插座
【发布时间】:2019-08-24 06:09:13
【问题描述】:

我有一个主要的出口来显示主页、仪表板、请求表。

Dashboard 是一个画廊,用于显示图表、表格等不同类型的图块。

我希望仪表板的每个图块中都有一个插座来显示图表或表格。

由于有多个 tile 实例,并且如果每个 tile 中的出口相同,恐怕每个 tile 都会响应 /tile/chart 或 /tile/table 的导航请求。 我应该能够区分每个瓷砖插座。

主要出口 -> 主页、仪表板、请求。

仪表板 -> 用另一个插座平铺组件以显示图表/列表。

主页组件

  <router-outlet></router-outlet>  //outlet for dashboard, request

路线

  {
    path: 'dashboard',
    component: DashboardComponent  //main outlet
  }, 
  {
    path: 'home',
    component: HomeComponent       // main outlet 
  }

仪表板组件:

   <Tile> --outlet for chart/table -- </Tile> //Tile 1
   <Tile> --outlet for chart/Table -- </Tile> //Tile 2 and so on.

【问题讨论】:

  • 您是否正在尝试导航到“仪表板/平铺/图表”?还是“仪表板”?
  • 我可以从家里导航到仪表板。仪表板的磁贴很少。我想在每个图块中都有一个辅助插座,以根据其输入显示图表或表格
  • 如果我了解您需要在仪表板组件中使用路由器出口子级。例如拆分模块。您可以拥有“AppModule”、“DashboardModule”等。在 AppModule 中,您拥有(就像现在一样)主要出口。在仪表板模块中,您可以拥有另一个路由器插座,因此在仪表板中您可以定义新路由:“/tile/chart”、“瓷砖/...”,您将链接的那些组件将在仪表板路由器插座中呈现
  • 在dashboard模块中,如果每个tile组件都有那个outlet来消费/tile/chart或/tile/table,那么每个tile outlet不会响应导航请求,因为outlet在所有tile中都是重复的仪表板@Kalamarico
  • 我没说要为瓷砖做一个插座。只比你多一个路由器插座(你只有一个对吗?在 appModule 中)。在仪表板组件模板中,设置一个新的路由器插座,并在路由定义中,您可以处理这些瓷砖路径,它们将在该路由器插座中呈现

标签: javascript angular angular2-routing angular-routing angular-routerlink


【解决方案1】:

如果我理解正确,您不需要嵌套的插座/子路线,因为您不打算以某种方式导航到您的图表/表格。当您计划根据 url 更改内容时,通常使用路由。例如,您的仪表板上有超过 1 个页面,并希望让用户在它们之间切换。 那么你应该有/dashboard/1/dashboard/2 等路线。但据我了解,你想显示带有动态定义的磁贴/小部件的仪表板,对吧? 因此,您所需要的只是一些定义要显示的 what 的数据结构和一些用于显示这些内容的组件。您将拥有 1 个主要组件 - dashboard 与路线 /dashboard 和一些组件,每个组件都显示一种类型的瓷砖。像这样的:

<div *ngFor="let line of widgetLines; let i = index">
    <div *ngFor="let group of line.groups; let j = index">
        <div *ngFor="let widget of group.widgets; let k = index">
            <ng-container [ngSwitch]="widget.type">
                <db-widget-one *ngSwitchCase="1" [data]="widget.data" (onSettingsUpdated)="updateWidget(i, j, k, $event)"></db-widget-one>
                <db-widget-two *ngSwitchCase="2" [data]="widget.data" (onSettingsUpdated)="updateWidget(i, j, k, $event)"></db-widget-two>
                <db-widget-three *ngSwitchCase="3" [data]="widget.data" (onSettingsUpdated)="updateWidget(i, j, k, $event)"></db-widget-three>
                <div *ngSwitchDefault>Unknown widget type: {{widget.type | json}}</div>
            </ng-container>
        </div>
    </div>
</div>

【讨论】:

  • 到目前为止,我一直在做同样的事情来在小部件之间切换。我开始使用路由选项的原因是,我有一个新要求,即每个图块上都有一个设置按钮。单击该设置按钮后,将显示一个请求表单。在提交请求时,我需要根据响应在小部件之间切换。我现在将尝试直接将该响应链接到图块,而不是考虑路由。
  • 这里看不到问题,你知道用户想要编辑的小部件 - 调整设置后更新对应widgetLines[i].groups[j].widget[k],视图也会更新。
猜你喜欢
  • 2019-06-28
  • 2018-12-15
  • 2017-03-09
  • 2018-09-02
  • 1970-01-01
  • 2018-11-14
  • 2017-04-29
  • 2018-07-28
  • 2016-12-30
相关资源
最近更新 更多