При использовании Router (this.router.url
) я получаю строку /MyRouterName?type=abc
, sometime /MyRouterName
если не имеет параметра
Могу ли я получить путь /MyRouterName
(для всех случаев) из полного URL- /MyRouterName
?
При использовании Router (this.router.url
) я получаю строку /MyRouterName?type=abc
, sometime /MyRouterName
если не имеет параметра
Могу ли я получить путь /MyRouterName
(для всех случаев) из полного URL- /MyRouterName
?
Вы можете использовать моментальный снимок активированного маршрута, чтобы получить этот 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);
}
Ссылка на исходный ответ SO от Jose G Varanam Как получить текущий маршрут
Если вы перезагрузите страницу, вы не сможете получить маршрут маршрута по Router или ActivatedRoute.
Вы можете использовать window.location.pathname
вместо этого.
Ответ user5049376 дал мне не работу. свойство url было undefined.
console.log(activatedRoute.snapshot.url[0].path);
вместо этого я использовал свойство firstChild.
console.log(this.activatedRoute.snapshot.firstChild.url[0].path);
Это работает для меня.
Импортируйте это:
import { Router } from '@angular/router';
затем передайте его конструктору:
path: any;
constructor(private router: Router) {
this.path = this.router.url;
console.log(this.path);
}
Я попытался использовать другие ответы, и все они заканчиваются с неопределенным.
Итак, я сделал это:
#AppComponent
constructor(private router: Router){
// Subscribe to RouterEvents
this.router.events
.subscribe((event) => {
if (event instanceof NavigationStart) {
// Could add more chars url:path?=;other possible
const urlDelimitators = new RegExp(/[?//,;&:#$+=]/);
let currentUrlPath = event.url.slice(1).split(urlDelimitators)[0];
console.log('URL_PATH: ', currentUrlPath);
}
});
}
Я подписываюсь на изменения роутера, поэтому, когда происходит NavitionStartEvent, обнаруживается новый URL_PATH.
Если вам не нужна поддержка IE, вы можете использовать класс URL для обратного инжиниринга компонентов url из строки:
(new URL(this.router.url), 'x:/').pathName
Учитывая ваш пример, приведенный выше код даст только часть "/MyRouterName" из "/MyRouterName? Type = abc".
Примечание. Часть "x:/" существует только для удовлетворения класса URL-адресов, необходимого для protocoll (который this.router.url не предоставляет).
Разве это не просто и не эффективно?
let path = this.router.url.split("?")[0];