无论如何要获得具有提供的激活路线的父路线的集合吗?
如果我有一个嵌套的路由结构,如:
/search/view/3/person/5
我的网址将如下所示:[
{ part: 'search' }
{ part: 'view/3' }
{ part: 'person/5' }
]
。
我怎样才能把它变成某种结构,如:
`mark` int(11) DEFAULT 0 NOT NULL
我查看了URLTree和URLSegments,但看起来它无法区分参数和路径的内容。
答案 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('/') + '/';
}