2016-11-25 2 views
6

У меня есть маршрут:/приложение/проект/23/просмотровУгловой 2 Маршрут Params в ребенка Маршруты

Каждая часть пути является потомком предыдущей части, и все дети ленивы загружены (не уверен, что если лениво загрузится немного здесь уместно)

/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) 

Я пытаюсь получить доступ к параметру маршрута 'ProjectID' (в данном случае: 23)

Doing следующее:

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

дает мне пустой объект для this.route.params

params: {} 

Однако, делая это:

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

дает мне то, что я ищу:

params: Object {projectId: "23"} 

Потому что это является дочерним маршрутом, я должен указать this.route. parent.parent, чтобы получить параметры маршрута (некоторого) родительского маршрута?

Есть ли лучший способ получить Params от маршрута полного потому, что происходит, если:

1) изменить глубину детского маршрута и переместить его еще один шаг вниз. Должен ли я изменить свой код сейчас, чтобы сказать this.route. parent.parent .params

2) Или сказать, что это 10-е (поколение ?, суб-ребенок?, Правнук?). Должен ли я тогда сказать: this.route. parent.parent.parent.parent.parent.parent.parent.parent.parent .params

--- Edit: добавлены функции маршрутизации конфигурационных файлов ---

app.routing.ts

const routes: Routes = [ 
    {path: 'app', loadChildren: './views/private/private.module#PrivateModule'} 
]; 

private.routing.ts

const routes: Routes = [{ 
    path: '', 
    component: PrivateComponent, 
    children: [    
    {path: 'project', loadChildren: './project/project.module#ProjectModule'}, 
    {path: '', redirectTo: 'project', pathMatch: 'full'} 
] 

project.routing.ts

const routes: Routes = [{ 
    path: ':projectId', 
    component: ProjectComponent, 
    children: [ 
    {path: 'views', loadChildren: './views/views.module#ViewsModule'}, 
    {path: '', redirectTo: 'views', pathMatch: 'full'} 
    ] 
+1

Не могли бы вы показать все свои маршруты. И в каком компоненте вы хотите получить доступ к параметрам? – mxii

+0

@mxii добавил маршрут-configs – Nik

ответ

1

Вы можете получить доступ к дереву маршрута с pathFromRoot свойством, он возвращает массив ActivatedRoutes со всеми родителями.

this.route.pathFromRoot[2].params