Как получить текущий маршрут
в текущих документах говорится только о получении параметров маршрута, а не фактических сегментов маршрута.
например, если я хочу найти родителя текущего маршрута, как это возможно?
23 ответа:
угловой RC4:
вы можете импортировать
Router
С@angular/router
затем введите его:
constructor(private _router: Router ) { this.router = _router; }
затем назовите его URL-параметром:
console.log(this.router.url); // /routename
Inject
Location
к вашему компоненту и читатьlocation.path();
вам нужно добавитьвам нужно добавитьROUTER_DIRECTIVES
где-то так угловой может решитьLocation
.import: [RouterModule]
модуль.обновление
в V3 (RC.3) маршрутизатор можно вставить
ActivatedRoute
и получить доступ к более подробной информации, используя егоsnapshot
собственность.constructor(private route:ActivatedRoute) { console.log(route); }
или
constructor(private router:Router) { router.events.subscribe(...); }
для нового маршрутизатора >= 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" }
в угловой 4/5, чтобы получить сегменты маршрута.
import { ActivatedRoute, UrlSegment } from '@angular/router'; constructor( route: ActivatedRoute) {} getRoutes() { const segments: UrlSegment[] = this.route.snapshot.url; }
для тех, кто все еще ищет это. На Угловой 2.х есть несколько способов сделать это.
constructor(private router: Router, private activatedRoute: ActivatedRoute){ // string path from root to current route. i.e /Root/CurrentRoute router.url // just the fragment of the current route. i.e. 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 i.e. Root // since the parent is an ActivatedRoute object, you can get the same using activatedRoute.parent.url.value[0].path }
ссылки:
использовать
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) }
чтобы надежно получить полный текущий маршрут, вы можете использовать это
this.router.events.subscribe( (event: any) => { if (event instanceof NavigationEnd) { console.log('this.router.url', this.router.url); } } );
с angular 2.2.1 (в проекте на основе angular2-webpack-starter) работает следующее:
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.
вот что работает для меня в угловой 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 e.g. "/home" }
The
data
это объект и нам нуженurl
свойства, содержащиеся в этом объекте. Поэтому мы фиксируем это значение в переменной, и мы также можем использовать эту переменную на нашей HTML-странице. Например, я хочу показать div только тогда, когда пользователь находится на домашней странице. В этом случае мой url-адрес маршрутизатора будет/home
. Поэтому я могу написать div следующим образом:<div *ngIf="location == '/home'"> This is content for the home page. </div>
у меня была такая же проблема с использованием
this.router.url
Я получаю текущий маршрут с запросом params. Обходной путь, который я сделал, использовал это вместо этого:
this.router.url.split('?')[0]
не очень хорошее решение, но полезная.
короткая версия, если у вас есть маршрутизатор импортированные, то вы можете просто использовать некоторые вещи, как
этого.обращать в бегство.url = = = "/ search"
еще сделать следующее
1) импортируйте маршрутизатор
import { Router } from '@angular/router';
2) объявите свою запись в конструкторе
constructor(private router: Router) { }
3) Используйте его значение в своей функции
yourFunction(){ if(this.router.url === "/search"){ //some logic } }
@Виктор ответ помог мне, это тот же ответ, что и он, но с небольшой детализацией, так как это может помочь кто-то
для ваших целей вы можете использовать
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/ или установить нг2-маршрутизатор-помощник от НПМ
npm install ng2-router-helper
это просто, в angular 2 вам нужно только импортировать маршрутизатор библиотека вроде этого:
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.url.subscribe(value => { // you may print value to see the actual object // console.log(JSON.stringify(value)); this.isPreview = value[0].path === 'preview'; })
здесь
router
примерActivatedRoute
это может быть ваш ответ, используйте метод params активированного маршрута, чтобы получить параметр из URL/маршрута, который вы хотите прочитать, ниже приведен демонстрационный фрагмент
import {ActivatedRoute} from '@angular/router'; @Component({ }) export class Test{ constructor(private route: ActivatedRoute){ this.route.params.subscribe(params => { this.yourVariable = params['required_param_name']; }); } }