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


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

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

23 220

23 ответа:

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

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

угловой 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(...);
}

см. также угловой 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"
}

в угловой 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
}

ссылки:

  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)
  }

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

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

угловой 2 rc2

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

с 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'];
        });
    }
}
this.router.events.subscribe((val) => {
   const currentPage = this.router.url; // Current page route
  const currentLocation = (this.platformLocation as any).location.href; // Current page url
});