Я хочу получить URL-адрес, который исходит из этого:
this.router.navigate(./somepath, { relativeTo: this.route })
this.route
имеет тип ActivatedRoute
.
Я пробовал url: string = route.snapshot.url.join('');
, но это дает пустую строку.
Я хочу получить URL-адрес, который исходит из этого:
this.router.navigate(./somepath, { relativeTo: this.route })
this.route
имеет тип ActivatedRoute
.
Я пробовал url: string = route.snapshot.url.join('');
, но это дает пустую строку.
Вы можете использовать активированный маршрут для получения активного URL-адреса.
import { ActivatedRoute } from '@angular/router';
constructor(
private activatedRoute: ActivatedRoute) {
console.log(activatedRoute.snapshot['_routerState'].url);
}
Это должно помочь:
constructor(router: Router) {
const url = router.url;
}
Где вы пытаетесь его использовать?
Поскольку вы используете маршрут, который вводится в конструктор, вы не можете использовать маршрут непосредственно в свойстве 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 который является асинхронным, так что, возможно, это не то, что вам нужно. Надеюсь, это поможет:)
У меня была похожая проблема, я хотел сохранить строку из текущего URL! было много решений, но ни одно из них мне не помогло, а затем я нашел способ сделать это в чистом Js, поэтому я попробовал ту же строку кода на угловом языке, и это сработало !!
window.location.href
но что действительно помогло мне это:
window.location.pathname;
например:
currentRout: string;
ngOnInit() {
this.currentRout = window.location.href;
console.log(this.currentRout);
}
Я знаю это старый пост, но..... продолжай !!
Я получил это так:
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);
});
}
Для меня следующие работы:
const url = '/' + this.route.pathFromRoot.map(r => r.snapshot.url).filter(f => !!f[0]).map(([f]) => f.path).join('/');
Это вручную проходит через все родительские маршруты и собирает URL-адрес результата.
Нет хаков, нет использования частных свойств. Работает для лениво загруженных модулей.
Я могу получить URL текущей страницы, используя следующий фрагмент кода
constructor(private activatedRoute: ActivatedRoute){}
const url = this.activatedRoute['_routerState'].snapshot.url;
Я получил это, не будучи таким же хакерским. Я использовал lodash для выравнивания массива также.
_.flatten(this.route.pathFromRoot.map(route => route.snapshot.url)).join('/')
Я попробовал все вышеупомянутые ответы, но не решил мою проблему. Я получил "/" в качестве вывода. Кто-нибудь может подсказать мне, как получить URL.