如何从完整的url字符串中获取唯一的路径

Pha*_*hân 22 angular2-routing

使用Router(this.router.url)时/MyRouterName?type=abc,/MyRouterName如果没有参数,我会得到字符串

我是否只能/MyRouterName从完整的URL 获取路径(对于所有情况)?

use*_*376 27

您可以使用激活的路径组件的快照来获取此URL.

import { Router, ActivatedRoute } from '@angular/router';
 constructor(
    private router: Router,
    private activatedRoute: ActivatedRoute) {

    console.log("routes");
    console.log(activatedRoute.snapshot.url); // array of states
    console.log(activatedRoute.snapshot.url[0].path); 
}
Run Code Online (Sandbox Code Playgroud)

链接到原始的SO答案由Jose G Varanam 如何获得当前路线

  • 对于最后一个`console.log`语句,我得到"TypeError:无法读取未定义的属性'路径' (8认同)
  • `snapshot.url`不会从根目录返回状态.我有这个解决方案`this.route.snapshot.pathFromRoot.map(o => o.url [0]).join('/')` (6认同)
  • 正如@NinjaOnSafari 指出的那样,这个答案是不够的,对于嵌套路由,需要从 root 开始迭代不同的快照。 (2认同)
  • 请注意,您只能在可路由组件、“<router-outlet>”内的组件中使用“activatedRoute”。另一种方式是,使用“router: Router”并调用其属性“router.url”来获取完整的 URL。要获取 urlSegments 数组,请调用 `router.parseUrl(this.router.url).root.segments`; (2认同)

小智 8

如果重新加载页面,则无法通过Router或ActivatedRoute获取路径路径.你可以用window.location.pathname而不是那个.

  • 什么样的副作用 (2认同)

Nal*_*ari 6

这适合我.

导入此:

import { Router } from '@angular/router';
Run Code Online (Sandbox Code Playgroud)

然后将它传递给构造函数:

path: any;

constructor(private router: Router) {
  this.path = this.router.url;
  console.log(this.path);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果路径中包含查询字符串,那么它实际上不仅仅是路径. (9认同)

小智 5

用户5049376给出的答案对我不起作用.url属性未定义.

console.log(activatedRoute.snapshot.url[0].path); 
Run Code Online (Sandbox Code Playgroud)

而不是我使用firstChild属性.

console.log(this.activatedRoute.snapshot.firstChild.url[0].path);
Run Code Online (Sandbox Code Playgroud)

  • 我还可以确认`activatedRoute.snapshot.url [0] .path`抛出一个`TypeError:无法读取未定义`的属性'path'.对我有用的解决方案是`activatedRoute.snapshot.firstChild.url [0] .path`.我使用的是Angular 4.0.0和Angular CLI 1.1.0. (2认同)