从我的主路由相对于子路由导航

时间:2016-12-14 14:43:35

标签: angular angular2-routing angular2-template

我的app.routing forRoot()文件:

const APP_ROUTES: Routes = [
  {path: 'immeuble', loadChildren: 'app/immeuble/immeuble.module#ImmeubleModule'},
  {path: '', component: HomeComponent}
];

在我的功能模块ImmeubleModule中,我有immeuble.routing forChild文件

const IMMEUBLE_ROUTES: Routes = [

  { path: ':id', component: ImmeubleComponent, children: [
    { path: 'general', component:GeneralComponent  },
    { path: 'objet', component:GeneralComponent  },
    { path: '**', redirectTo:'general', pathMatch:'full' },
  ] },
  { path: '', component: ImmeubleComponent , pathMatch:'full',children:[
    { path: '', component:AccueilComponent  },
  ]},
];

我的实际路径为immeuble/2/general

通过这条路径,我有两条激活路线:

  1. AppComponent中的根插座(在/immeuble时匹配)
  2. 并且作为root outlet的子项我在ImmeubleComponent中有出口(在/2/general上匹配)
  3. 我的AppComponent中有所有链接,因此我想添加一个链接以导航到/immeuble/2/object而不指定/immeuble/2我只想要这样的内容:

    router.navigate(['object'], relativeTo: activatedRoute[ImmeubleComponent])
    

    我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以注入并使用ActivatedRoute查询当前路线和子路线,以便导航您想要的实际路线。

在您的情况下,您可以使用ActivatedRoute.children方法获取子数组,然后查找最深的一个并用作导航的参数:

this.router.navigate(['./', {params}], { relativeTo: _.last(this.route.children) });
  • 在此示例中,您可以更新当前路线的参数,但也可以导航到较高级别(' ../')或相对于当前路线的其他路线。
  • 我觉得最后一个孩子是最深的孩子,但我还没有测试过。在我的例子中,ActivatedRoute的firstChild方法就足够了:)。