Angular2:获取当前路线的未解析版本

时间:2016-10-13 09:36:10

标签: angular angular2-routing

在我的应用程序中,我想加载上下文相关的帮助文本,因此文本基于应用程序的当前位置。 但是,当访问者位于具有id参数的位置时,不应加载每个id的单独帮助文本,而只应加载常规版本。我认为未经解开的路径最适合此目的。

一些代码作为澄清:

目前路线: / page / 1解析为PageComponent:

{path: '/page/:pageid', component: PageComponent}

我想显示此PageComponent的帮助文本。因此,对于检索帮助文本,我希望将未解析的路径(/ page /:pageid)作为变量。

我现在正在使用RC4,但欢迎所有解决方案。

修改:通常下面的代码似乎可以正常工作

constructor(public route: ActivatedRoute) {}

ngOnInit(): void {
    setTimeout(() => {
        console.log(this.route.snapshot._routeConfig.path);
    });
}

但是,实际上给定的路线是子路线:

{
    path: 'app',
    component: Core,
    children: [
       {path: 'page/:pageid', component: PageComponent}
    ]
}

在控制台中导致“app”。

编辑2 :关闭,但尚未退出...

ngOnInit(): void {
    setTimeout(() => {
        let state = this.router.routerState;
        console.log(state.firstChild(state.firstChild(state.root)).toString());
    });
}

结果:

Route(url:'page/1', path:'page/:pageid')

2 个答案:

答案 0 :(得分:0)

也许你可以这样做:

  1. 导入路线
  2. 订阅router.events以获取网址(doc
  3. 在网址更改时,循环路径的路径,查看模式是否匹配 网址

答案 1 :(得分:0)

在对核心js文件进行了一些挖掘之后,我得出了以下解决方案:

ngOnInit(): void {
    setTimeout(() => {
        const state = this.router.routerState;
        this.url = state.firstChild(state.firstChild(state.root)).snapshot._routeConfig.path;
    });
}

挖掘到@ angular / router / src / router_state.js:

RouterState.prototype.toString = function () { return this.snapshot.toString(); };

...

ActivatedRouteSnapshot.prototype.toString = function () {
    var url = this.url.map(function (s) { return s.toString(); }).join('/');
    var matched = this._routeConfig ? this._routeConfig.path : '';
    return "Route(url:'" + url + "', path:'" + matched + "')";
};

这为前面提到的解决方案提供了足够的信息。