2016-12-20 9 views
2

Есть ли способ получить коллекцию родительских маршрутов с помощью активированного маршрута?Угловой 2 Получить родительские маршруты

Если у меня есть вложенная структура маршрутов, как:

[ 
    { 
     path: 'search', component: SearchComponent, children: 
     [ 
      { 
       path: 'view/:id', component: ViewSearchComponent, children: 
       [ 
        { path: 'person/:id', component: PersonComponent } 
       ] 
      }, 
     ] 
    } 
] 

Моего сайт будет выглядеть следующим образом: /search/view/3/person/5.

Как я могу превратить это в какой-то структуры, как:

[ 
    { part: 'search' } 
    { part: 'view/3' } 
    { part: 'person/5' } 
] 

Я смотрел на URLTree и URLSegments, но похоже, что это не будет иметь возможность различать между тем, что параметры и Каков путь.

ответ

2

вы можете запустить следующий код, он будет возвращать тот же объект, который вы хотите.

import {ActivatedRoute} from '@angular/router'; 

    export class Component { 

     constructor(private route: ActivatedRoute){ 
       let pathroots = this.route.pathFromRoot; 
       let arr = []; 
       pathroots.forEach(path => { 
        let obj: any = {}; 
        let pathurl = ''; 
        path.url.subscribe(url => { 
         url.forEach(e => { 
          pathurl += e + '/'; 
         }); 
        }); 
        obj['part'] = pathurl; 
        arr.push(obj); 
      }); 
      console.log(arr,'*******************'); 
      } 

} 
+0

надеюсь, что это решит вашу проблему –

+0

я уже что-то, написанное, когда я увидел ваш ответ, но они выглядят почти так же, , Благодаря! – Steveadoo

0

Я придумал что-то само собой, благодаря Гюнтеру. Это должно быть достаточно хорошим, чтобы реализовать какую-то функцию Breadcrumbs на вашем компоненте. Это в значительной степени так же, как Vikash, но немного больше «rxjs'y»

private urlSub: Subscription; 

private buildNavigationTree(): void { 
    const pathFromRoot = this.activatedRoute.pathFromRoot; 
    let urlSub = Observable.merge(...pathFromRoot.map(p => p.url)); 
    let urlList: any[] = []; 
    let url; 
    //TODO somehow we have to recalculate the WHOLE thing on url change 
    //right now if part of the url changes i think it'll append to the end. 
    //possibly use navigationend? 
    this.urlSub = urlSub.subscribe(segments => { 
     //skip empty segments which show up sometimes 
     if (segments.length == 0) { 
      return; 
     } 
     url = this.buildUrl(url, segments); 
     urlList.push({ 
      url: url 
     }); 
    }); 
} 

private buildUrl(url: string, segment: UrlSegment[]): string { 
    return url + segment.map(s => s.path).join('/') + '/'; 
} 
Смежные вопросы