Как получить текущий маршрут

В текущих документах говорится только о получении параметров маршрута, а не о реальных сегментах маршрута.

Например, если я хочу найти родителя текущего маршрута, как это возможно?

    23 Solutions collect form web for “Как получить текущий маршрут”

    Новый маршрутизатор V3 имеет свойство url.

     this.router.url === '/login' 

    Угловой RC4:

    Вы можете импортировать Router из @angular/router

    Затем введите:

     constructor(private _router: Router ) { this.router = _router; } 

    Затем назовите его URL-параметр:

     console.log(this.router.url); // /routename 

    Внесите Location в свой компонент и прочитайте location.path(); Вам нужно добавить ROUTER_DIRECTIVES где-нибудь, чтобы Angular смог разрешить Location . Вам необходимо добавить import: [RouterModule] в модуль.

    Обновить

    В маршрутизаторе V3 (RC.3) вы можете ввести ActivatedRoute и получить доступ к более подробной информации, используя его свойство snapshot .

     constructor(private route:ActivatedRoute) { console.log(route); } 

    или

     constructor(private router:Router) { router.events.subscribe(...); } 

    См. Также « Угловой 2 роутер-прослушиватель событий»

    для нового маршрутизатора> = RC.3

    Лучший и простой способ сделать это!

     import { Router } from '@angular/router'; constructor(router: Router) { router.events.subscribe((url:any) => console.log(url)); console.log(router.url); // to print only path eg:"/login" } 

    В Angular 4/5 для получения сегментов маршрута.

     import { ActivatedRoute, UrlSegment } from '@angular/router'; constructor( route: ActivatedRoute) {} getRoutes() { const segments: UrlSegment[] = this.route.snapshot.url; } 

    Для тех, кто все еще ищет это. На Angular 2.x есть несколько способов сделать это.

     constructor(private router: Router, private activatedRoute: ActivatedRoute){ // string path from root to current route. ie /Root/CurrentRoute router.url // just the fragment of the current route. ie CurrentRoute activatedRoute.url.value[0].path // same as above activatedRoute.url.subscribe((url: urlSegment)=> console.log(url[0].path)) // same as above activatedRoute.snapshot.url[0].path // the url fragment from the parent route ie Root // since the parent is an ActivatedRoute object, you can get the same using activatedRoute.parent.url.value[0].path } 

    Рекомендации:

    1. https://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html
    2. https://angular.io/docs/ts/latest/api/router/index/Router-class.html
    3. https://angular.io/docs/ts/latest/guide/router.html

    Использовать это

     import { Router, NavigationEnd } from '@angular/router'; constructor(private router: Router) { router.events.filter((event: any) => event instanceof NavigationEnd) .subscribe(event => { console.log(event); }); } 

    И в main.ts импорт

     import 'rxjs/add/operator/filter'; 

    Вы можете попробовать

     import { Router, ActivatedRoute} from '@angular/router'; constructor(private router: Router, private activatedRoute:ActivatedRoute) { console.log(activatedRoute.snapshot.url) // array of states console.log(activatedRoute.snapshot.url[0].path) } 

    Альтернативные способы

     router.location.path(); this works only in browser console. 

    window.location.pathname которое дает имя пути.

    Собственный window объект отлично работает

     console.log('URL:' + window.location.href); console.log('Path:' + window.location.pathname); console.log('Host:' + window.location.host); console.log('Hostname:' + window.location.hostname); console.log('Origin:' + window.location.origin); console.log('Port:' + window.location.port); console.log('Search String:' + window.location.search); 

    В Angular2 Rc1 вы можете ввести RouteSegment и передать их в naviagte.

     constructor(private router:Router,private segment:RouteSegment) {} ngOnInit() { this.router.navigate(["explore"],this.segment) } 

    угловой 2 rc2

     router.urlTree.contains(router.createUrlTree(['/home'])) 

    С угловым 2.2.1 (в проекте с угловым2-webpack-стартером) это работает:

     export class AppComponent { subscription: Subscription; activeUrl: string; constructor(public appState: AppState, private router: Router) { console.log('[app] constructor AppComponent'); } ngOnInit() { console.log('[app] ngOnInit'); let _this = this; this.subscription = this.router.events.subscribe(function (s) { if (s instanceof NavigationEnd) { _this.activeUrl = s.urlAfterRedirects; } }); } ngOnDestroy() { console.log('[app] ngOnDestroy: '); this.subscription.unsubscribe(); } } 

    В шаблоне AppComponent вы можете использовать, например, {{activeUrl}}.

    Это решение вдохновлено кодом RouterLinkActive.

    Вот что работает для меня в Angular 2.3.1.

     location: any; constructor(private _router: Router) { _router.events.subscribe((data:any) => { this.location = data.url; }); console.warn(this.location); // This should print only path eg "/home" } 

    data – это объект, и нам нужно свойство url содержащееся в этом объекте. Таким образом, мы фиксируем это значение в переменной, и мы также можем использовать эту переменную на нашей странице HTML. Например, я хочу показать div только тогда, когда пользователь находится на главной странице. В этом случае мое значение URL-адреса маршрутизатора будет /home . Поэтому я могу написать div следующим образом:

     
    This is content for the home page.

    У меня была такая же проблема, используя

     this.router.url 

    Я получаю текущий маршрут с параметрами запроса. Обходной путь я использовал вместо этого:

     this.router.url.split('?')[0] 

    Не очень хорошее решение, но полезно.

    Для ваших целей вы можете использовать this.activatedRoute.pathFromRoot .

     import {ActivatedRoute} from "@angular/router"; constructor(public activatedRoute: ActivatedRoute){ } 

    С помощью pathFromRoot вы можете получить список родительских URL-адресов и проверить, соответствует ли необходимая часть URL вашему условию.

    Для получения дополнительной информации, пожалуйста, проверьте эту статью http://blog.2muchcoffee.com/getting-current-state-in-angular2-router/ или установите ng2-router-helper из npm

     npm install ng2-router-helper 

    это просто, в угловом 2 вам нужно импортировать библиотеку Router следующим образом:

     import { Router } from '@angular/router'; 

    Затем в конструкторе компонента или службы вы должны создать его следующим образом:

     constructor(private _router: Router) {} 

    Затем в любой части кода либо в функции, и в методе, и в любом случае:

      this._router.events .subscribe( (url:any) => { let _ruta = ""; url.url.split("/").forEach(element => { if(element!=="" && _ruta==="") _ruta="/"+element; }); console.log("route: "+_ruta); //< <<---- Root path console.log("to URL:"+url.url); //<<<---- Destination URL console.log("from URL:"+this._router.url);//<<<---- Current URL }); 

    Вы можете использовать ActivatedRoute для получения текущего маршрутизатора

    Оригинальный ответ (для версии RC)

    Я нашел решение в AngularJS Google Group, и это так просто!

     ngOnInit() { this.router.subscribe((url) => console.log(url)); } 

    Вот оригинальный ответ

    https://groups.google.com/d/msg/angular/wn1h0JPrF48/zl1sHJxbCQAJ

    Чтобы найти родителя текущего маршрута, вы можете получить UrlTree с маршрутизатора, используя относительные маршруты:

     var tree:UrlTree = router.createUrlTree(['../'], {relativeTo: route}); 

    Затем, чтобы получить сегменты первичной розетки:

     tree.root.children[PRIMARY_OUTLET].segments; 

    Чтобы надежно получить полный текущий маршрут, вы можете использовать этот

     this.router.events.subscribe( (event: any) => { if (event instanceof NavigationEnd) { console.log('this.router.url', this.router.url); } } ); 

    короткая версия, если вы импортировали маршрутизатор, тогда вы можете просто использовать что-то вроде

    this.router.url === “/ search”

    иначе сделайте следующее

    1) Импорт маршрутизатора

     import { Router } from '@angular/router'; 

    2) Объявить свою запись в конструкторе

     constructor(private router: Router) { } 

    3) Используйте его значение в своей функции

     yourFunction(){ if(this.router.url === "/search"){ //some logic } } 

    Ответ @victor помог мне, это тот же самый ответ, что и он, но с небольшим количеством деталей, поскольку это может помочь кому-то

    это может быть ваш ответ, используйте метод params активированного маршрута, чтобы получить параметр от URL / маршрута, который вы хотите прочитать, ниже – демонстрационный fragment

     import {ActivatedRoute} from '@angular/router'; @Component({ }) export class Test{ constructor(private route: ActivatedRoute){ this.route.params.subscribe(params => { this.yourVariable = params['required_param_name']; }); } } 
     this.router.events.subscribe((val) => { const currentPage = this.router.url; // Current page route const currentLocation = (this.platformLocation as any).location.href; // Current page url }); 

    На данный момент я получаю свой путь следующим образом:

     this.router.url.subscribe(value => { // you may print value to see the actual object // console.log(JSON.stringify(value)); this.isPreview = value[0].path === 'preview'; }) 

    Где, route является экземпляром ActivatedRoute

    Interesting Posts

    Какую Windows 7 установить?

    Как предотвратить Mac OS X, создавая файлы .DS_Store на томах без Mac (HFS)?

    Получение «внешнего» IP-адреса в Java

    Обход VPN для определенных приложений

    Что такое std :: move (), и когда он должен использоваться?

    Отключить автоматическое обновление вкладок в Chrome Desktop

    Как я могу сделать изображение с белым фоном и сделать его прозрачным

    VM sandboxing – что происходит?

    Как защитить Firebase Cloud Function HTTP-конечную точку, чтобы разрешать только проверенные пользователями Firebase?

    Условия, когда, наконец, не выполняются в блоке .net try..finally

    использовать jQuery’s find () для объекта JSON

    Как собрать zip-файл, который был отправлен по электронной почте в нескольких частях?

    При удалении диска при доступе файловая система повреждена, можно ли ее устранить?

    Удалить шаблон по умолчанию в Microsoft Excel 2010

    Почему я не могу подключиться к удаленному рабочему столу на моем компьютере под управлением Windows 10?

    Давайте будем гением компьютера.