【问题标题】:Angular2 navigate from a component to a sibling component without tearing down the firstAngular2 从一个组件导航到同级组件而不拆除第一个
【发布时间】:2016-11-16 17:58:40
【问题描述】:

我刚开始学习 Angular2,我想构建一个非常常见的“列表-详细”样式页面,类似于:http://xgrommx.github.io/rx-book/index.html。当您单击左侧栏中的某个项目时,它会启动到中心详细视图的导航,而无需拆下左侧栏。实现这种效果的最佳方法是什么?

我目前的设计如下:

当我启动 home 组件时,列表组件(child1)将立即加载,它会调用外部 API 来获取项目列表的名称(仅名称)。单击左侧的项目名称时,它将创建一个新的详细信息组件。 detail 组件在其 ngOnInit 方法中获取项目详细信息。我尝试使用辅助路由将两个子组件嵌套在同一页面上,但它似乎不起作用。我的家乡路线如下所示:

export const HomeRoutes: RouterConfig = [
  {
    path: '',
    redirectTo: '/home',
    pathMatch: 'full'
  },
  {
    path: 'home',
    component: HomeComponent,
    children: [
      {
        path: '',
        component: ListComponent
      },
      {
        path: ':item',
        component: DetailComponent
        outlet: 'detail'
      }
    ]
  }
];

在我的home.component.ts 中,我只有这个:

  <h2>Home</h2>

  <router-outlet></router-outlet>

  <router-outlet name="detail"></router-outlet>

我导航到详细视图的方式是在列表组件中调用 navigate(),如下所示:

onSelect(item : string) {
    this.router.navigate(['/detail', item]);
  }

但是每次我单击任何项​​目时,详细视图都不会显示,并且会显示如下错误:

Error: Uncaught (in promise): Error: Cannot match any routes: 'home/item'
.

我是否在使用辅助路线的正确轨道上,是否有更好的方法来实现此功能?

【问题讨论】:

    标签: html angularjs angular angular-routing


    【解决方案1】:

    当前路由器版本在使用routerLinknavigate 方法导航到辅助插座时存在一些问题。您应该构建完整的 URL 并使用 navigateByUrl

    this.router.navigateByUrl('/home/(list//detail:detail)
    

    Plunker 与 example。单击详细信息按钮,然后单击管理员。管理员在管理员插座中路由。全屏打开以查看 URL 格式。

    URL 具有以下语义

    1. 子路径由 / 分隔
    2. 如果路径有兄弟,则应该用括号括起来
    3. 兄弟姐妹用 // 分隔
    4. 出口和路径由:分隔:

      父/子/(gchild1//outletname:gchild2)

    另外一个question

    【讨论】:

    • "/home/(list//detail:detail" 中的括号后面有什么原因吗?而不仅仅是"home/list/:item"?
    • 确实用理由更新了答案。我将链接另一个 q 你解释了这一点,但这可能需要一些时间
    • 问题是我没有兄弟路径。我只有两个同级组件,其中一个(列表组件)与主组件具有相同的路径。另一个兄弟组件(详细信息)有一个带有参数的路径:项目。这种情况下url怎么写?
    • 好的,另一个巧妙的解决方案是让左栏成为 home 的指令。然后它只需要一个 用于详细组件。
    猜你喜欢
    • 2018-07-21
    • 2016-08-13
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2016-09-07
    相关资源
    最近更新 更多