【问题标题】:Multiple router-outlet on the page for the same route同一路由页面上有多个路由器出口
【发布时间】:2017-09-10 15:40:21
【问题描述】:

在我的根组件中,我有以下模板:

<main class="main">
  <div class="main__container">
    <div class="main__left-area">
      <router-outlet></router-outlet>
    </div>
    <div class="main__right-area">
      <router-outlet name="aside"></router-outlet>
    </div>
  </div>
</main>

我想为同一路由加载主要router-outlet 中的一些组件和辅助router-outlet 中的一些其他组件(当然,我有几条路线)。因此,我这样定义我的路线:

export const AppRoutes: Routes = [
  {
    path: "",
    component: HomeSummaryComponent
  },  
  {
    path: "",
    component: AskSummaryComponent,
    outlet: "aside"
  },
  {
    path: "payments",
    component: PaymentComponent
  },
  {
    path: "payments",
    component: DataSummaryComponent,
    outlet: "aside"
  }
];

当页面加载时,它运行良好,我在主router-outlet 中有HomeSummaryComponent,在旁边router-outlet 中有AskSummaryComponent。但是,在导航中,我有这个:

<a routerLink="/payments" class="navigation__link">Payments</a></span>

当我点击此链接时,主要router-outlet 的内容被PaymentComponent 替换,但旁边的router-outlet 仍显示AskSummaryComponent

我还尝试通过“/payements-aside”重命名第二条“付款”路线,并将链接替换为:

<a routerLink="/payments(aside:payments-aside)" class="navigation__link">Payments</a>

但它仍然不起作用。但是,当我直接访问 http://localhost:8083/payments(aside:payments-aside) 时,它确实可以工作,但这个 URL 不是很干净......它不能用于面向公众的网站,因为。

有人知道如何实现这个简单的需求吗?

【问题讨论】:

    标签: angular router-outlet


    【解决方案1】:

    以下对我有用

        {
           path: 'customers', canActivate: [AuthGuard], children: [
           {
              path: '',
              component: CustomersComponent,
              outlet: 'main'
           },
           {
              path: '',
              component: SideBarComponent,
              outlet: 'sideBar'
           }
         ]
        }
    

    【讨论】:

      【解决方案2】:

      对于那些感兴趣的人,我最终以自己的方式解决了这个问题。我使用了由 Madhu Ranjan in here 描述的 MasterComponent 的实现来制作这个 plunker:http://plnkr.co/edit/NNufpBkvXD6B5S6A8HT4

      长话短说,我使用路由配置来创建每个页面的组合,然后Aggregator 组件使用此配置将组件注入到正确的位置。它本身不是很通用,但我认为它可以改进。

      【讨论】:

        【解决方案3】:

        您能否尝试使用以下语法导航到 PaymentComponent 并清除 aside 出口:

        <a [routerLink]="[{ outlets: { primary: 'payments', aside: null }}]"> Payments</a>
        

        【讨论】:

        • 嗨,它什么也没做。但是,我用&lt;a [routerLink]="[{ outlets: { primary: 'payments', aside: 'payments-aside' }}]" class="navigation__link"&gt;Payments&lt;/a&gt; 替换了链接,它可以工作,但只是因为我被重定向到http://localhost:8083/payments(aside:payments-aside)。但是,正如我在原始帖子中所说,我不希望 URL 包含此类内容。人们可以改变它,我不想要它。我正在探索另一个想法,但请随时为我提出解决方案。我更喜欢使用“原生”的东西。
        • 我不确定我是否遵循(另外,看起来您已经重命名了原始问题和现在之间的一些内容)。点击“付款”时,您的最终目标不是刷新主要出口并清除备用出口吗?如果是,为什么要清除aside 的路径?
        • 对不起,如果我不清楚。主要目标是拥有一个包含两个(或更多)router-outler 的根组件。然后,由于路由配置,我定义了我网站的其他页面。例如,路由“/”必须在“primary”出口中显示“componentA”,在“aside”出口中显示“componentB”。当我导航到“/other”时,我想在“主要”插座中显示“componentC”,在“旁边”插座中显示“componentD”。我想通过路线撰写我的页面。这样,当我单击链接时,所有router-outlets 内容都会被替换。而且我不想要诸如 (outlet: 'aux') 这样的 URL。
        • 如果您不想在 URL 中显示任何内容,那么您一开始就不应该使用路由器。但这会让你的生活变得更加复杂。 :(
        • 嗯,这就是我害怕的。然而,我很惊讶,因为我的需求很普遍,而且我认为其他人也会需要它。我的所有页面都将由一个左块和一个右块组成,我可以根据页面插入组件。我不想总是创建一个像“PaymentPageComponent”这样同时包含块和插入组件的组件,我需要每个页面都有这样一个组件......我会继续我的另一个想法并在这里发布答案有用。感谢您的帮助。
        猜你喜欢
        • 2021-10-15
        • 2017-12-03
        • 2016-12-09
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 2012-12-20
        • 1970-01-01
        相关资源
        最近更新 更多