儿童路线中的Angular 2 Route Params

Nik*_*Nik 8 angular2-routing angular

我有一条路线:/ app/project/23/views

路径的每个部分都是前一部分的子节点,并且所有子节点都是延迟加载的(不确定此处的延迟加载位是否相关)

/app           (root  component)
  /project     (child component of app, child route of app)
    /23        (route param 'projectId')
      /views   (child component of project, child route of project)
Run Code Online (Sandbox Code Playgroud)

我正在尝试访问路由参数'projectId'(在这种情况下:23)

执行以下操作:

constructor(private route: ActivatedRoute) {}
ngOnInit() {
    this.route.params.subscribe(params => {
        console.log('params:', params);
}
Run Code Online (Sandbox Code Playgroud)

给了我一个空的对象this.route.params

params: {}
Run Code Online (Sandbox Code Playgroud)

但是这样做:

constructor(private route: ActivatedRoute) {}
ngOnInit() {
    this.route.parent.parent.params.subscribe(params => {
        console.log('params:', params);
}
Run Code Online (Sandbox Code Playgroud)

给我我正在寻找的东西:

params: Object {projectId: "23"}
Run Code Online (Sandbox Code Playgroud)

因为它是子路由,我是否必须指定this.route.parent.parent获取(某些)父路由的路由参数?

是否有更好的方法从完整路线获取参数因为如果发生以下情况会发生什么:

1)我改变了儿童路线的深度,再向下移动一步.我现在必须更改我的代码才能说出这个.route.parent.parent.parent .params

2)或者说它是第10代(一代?,子孩子?,伟大的曾孙子?).然后我不得不说:this.route.parent.parent.parent.parent.parent.parent.parent.parent.parent .params

---编辑:添加路由配置文件---

app.routing.ts

const routes: Routes = [
  {path: 'app', loadChildren: './views/private/private.module#PrivateModule'}
];
Run Code Online (Sandbox Code Playgroud)

private.routing.ts

const routes: Routes = [{
  path: '',
  component: PrivateComponent,
  children: [            
    {path: 'project', loadChildren: './project/project.module#ProjectModule'},
    {path: '', redirectTo: 'project', pathMatch: 'full'}
 ]
Run Code Online (Sandbox Code Playgroud)

project.routing.ts

const routes: Routes = [{
  path: ':projectId',
  component: ProjectComponent,
  children: [
    {path: 'views', loadChildren: './views/views.module#ViewsModule'},
    {path: '', redirectTo: 'views', pathMatch: 'full'}
  ]
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用pathFromRoot属性访问路由树,它返回一个ActivatedRoutes包含所有父级的数组。

this.route.pathFromRoot[2].params
Run Code Online (Sandbox Code Playgroud)