Angular2 получить URL-адрес ActivatedRoute

Я хочу получить URL-адрес, который исходит из этого:

this.router.navigate(./somepath, { relativeTo: this.route })

this.route имеет тип ActivatedRoute.

Я пробовал url: string = route.snapshot.url.join('');, но это дает пустую строку.

Ответ 1

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

import { ActivatedRoute } from '@angular/router';
 constructor(
    private activatedRoute: ActivatedRoute) {
    console.log(activatedRoute.snapshot['_routerState'].url); 
}

Ответ 2

Это должно помочь:

constructor(router: Router) {
  const url = router.url;
}

Ответ 3

Где вы пытаетесь его использовать?

Поскольку вы используете маршрут, который вводится в конструктор, вы не можете использовать маршрут непосредственно в свойстве init. Поэтому вам нужно сделать это в или после вызова конструктора. Итак, что-то вроде этого должно работать:

export class Test {
    url: string
    constructor(private route: ActivatedRoute) {
        this.url = route.snapshot.url.join('');
    }
}

Официальная документация показывает другой способ получения текущего URL: https://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html который является асинхронным, так что, возможно, это не то, что вам нужно. Надеюсь, это поможет:)

Ответ 4

У меня была похожая проблема, я хотел сохранить строку из текущего URL! было много решений, но ни одно из них мне не помогло, а затем я нашел способ сделать это в чистом Js, поэтому я попробовал ту же строку кода на угловом языке, и это сработало !!

window.location.href 

но что действительно помогло мне это:

window.location.pathname;

например:

currentRout: string;

ngOnInit() {
this.currentRout = window.location.href;
console.log(this.currentRout);
}

Я знаю это старый пост, но..... продолжай !!

Ответ 5

Я получил это так:

import { filter, take } from 'rxjs/operators';

constructor(
  private router: Router
) {
  this.router.events.pipe(
    filter(event => event instanceof ChildActivationEnd),
    take(1),
  ).subscribe(event=>{
    const url = event.snapshot['_routerState'].url;
    console.log('url', url);
  });
}

Ответ 6

Для меня следующие работы:

const url = '/' + this.route.pathFromRoot.map(r => r.snapshot.url).filter(f => !!f[0]).map(([f]) => f.path).join('/');

Это вручную проходит через все родительские маршруты и собирает URL-адрес результата.

Нет хаков, нет использования частных свойств. Работает для лениво загруженных модулей.

Ответ 7

Я могу получить URL текущей страницы, используя следующий фрагмент кода

constructor(private activatedRoute: ActivatedRoute){}

const url = this.activatedRoute['_routerState'].snapshot.url;

Ответ 8

Я получил это, не будучи таким же хакерским. Я использовал lodash для выравнивания массива также.

_.flatten(this.route.pathFromRoot.map(route => route.snapshot.url)).join('/')

Ответ 9

Я попробовал все вышеупомянутые ответы, но не решил мою проблему. Я получил "/" в качестве вывода. Кто-нибудь может подсказать мне, как получить URL.