【问题标题】:Angular: Child Route MatchingAngular:子路由匹配
【发布时间】:2018-06-17 22:35:10
【问题描述】:

假设我们有以下路线:

{
    path: 'a',
    component: AComponent,
    children: [
        {
            path: '',
            component: BComponent
        },
        {
            path: '',
            component: CComponent,
            children: [
                { path: '', component: DComponent }
            ]
        }
    ]
}

下面的 URL 被粘贴到浏览器的地址栏中:

http://localhost:4200/a

问题

  1. 路由器如何知道要显示什么组件?
  2. 是否会显示所有四个组件(A、B、C、D)?
  3. 每个组件将显示在哪里?
    • 每个父组件是否总是有自己的RouterOutlet,所以每个组件都沿着parent/child/grand-child/etc的路由。显示在其父级各自的 RouterOutlet 中?
    • 通常,当显示带有子路由的路由时,每个组件都显示在其父 RouterOutlet 内。但是,如果只有 AComponent 有 RouterOutlet,那么 BComponent、CComponent 和 DComponent 会显示在哪里呢?

【问题讨论】:

    标签: javascript angular routing


    【解决方案1】:

    鉴于您没有收到任何错误,路由器将为您提供它找到的第一个匹配路由。在这种情况下,BComponent。路由器插座中只能显示一个组件(否则您需要 auxRoute 之类的东西)。

    如果 CComponent 有一个类似 'c' 的路由,您可以从路由 http://localhost:4200/a/c 访问它,那么您将在 CComponents 路由器出口中获得带有 DComponent 的 CComponent。

    希望对您有所帮助。

    【讨论】:

    • 谢谢。 1)所以匹配从最低的孩子开始递归地发生?由于显示的是 B 而不是 A。 2)不会有多个嵌套的RouterOutlets吗?所以 B 显示在 A 的底部?
    • 您认为您可以在此处添加更多信息吗?如果路由器从顶部开始搜索,它会首先找到 AComponent,而不是 BComponent。
    • 在您的示例中,AComponent 将始终加载。 BComponent 和 CComponent 将显示为 AComponents 路由器出口。同样,您需要在 CComponent 的路径中添加一个值。如果您加载 http://localhost:4200/a AComponent 将在其路由器出口中加载 BComponent。当您向 CComponent 添加路径值并导航到 http://localhost:4200/a/c 时,您将在 AComponent 的路由器出口中获得带有 CComponent 的 ACompnent,在 CComponents 的路由器出口中获得 DComponent。
    • 谢谢mgm,这很有帮助。我还从我的一个朋友那里得知 /a 实际上是 /a/""。虽然它只有一个空级别。即 /a 等于 /a/"",但不等于 /a/""/""。对吗?
    猜你喜欢
    • 2022-01-25
    • 2017-01-02
    • 2019-03-28
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2019-10-17
    • 1970-01-01
    相关资源
    最近更新 更多