Angular 2获取父路线

时间:2016-12-20 18:24:19

标签: angular angular2-routing

无论如何要获得具有提供的激活路线的父路线的集合吗?

如果我有一个嵌套的路由结构,如:

/search/view/3/person/5

我的网址将如下所示:[ { part: 'search' } { part: 'view/3' } { part: 'person/5' } ]

我怎样才能把它变成某种结构,如:

`mark` int(11) DEFAULT 0 NOT NULL

我查看了URLTree和URLSegments,但看起来它无法区分参数和路径的内容。

3 个答案:

答案 0 :(得分:3)

您可以运行以下代码,它将返回您想要的相同对象。

  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,'*******************');
           }

 }

答案 1 :(得分:2)

您可以注入ActivatedRoute,然后迭代parent属性,直到没有

https://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html#!#parent-anchor

答案 2 :(得分:0)

感谢Gunter,我自己想出了一些东西。这应该足以在您的组件上实现某种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('/') + '/';
}