Angular2从组件导航到兄弟组件而不会拆除第一个组件

时间:2016-07-14 00:19:08

标签: html angularjs angular angular-routing

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

我目前的设计如下: enter image description here

当我启动home组件时,列表组件(child1)将立即加载,它将调用外部API来获取项列表的名称(仅名称)。单击左侧的项目名称时,它将创建一个新的Detail-component。详细信息组件在其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'
.

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

1 个答案:

答案 0 :(得分:3)

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

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

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

网址具有以下语义

  1. 子路径由/
  2. 分隔
  3. 如果路径有兄弟姐妹,那么它应该用括号
  4. 包围
  5. 兄弟姐妹由//
  6. 分隔
  7. 出口和路径由以下分隔:

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

  8. 另一个question