В одностраничном приложении Angular 7 с «useHash: true» конфигурацией модуля маршрутизатора мне нужно сгенерировать URL для ресурса, который будет открыт в новой вкладке.
Для маршрутизации в окне приложения следующий код работает как положено:
this.router.navigate (['foo', 1]);
Это означает, что он генерирует URL, как:
http://localhost:4200/#/foo/1
Хотя при использовании следующего метода:
const url = this.router.createUrlTree (['foo', 1]). toString ();
URL-адрес "/ foo / 1" - без "#", поэтому ...
window.open (url, '_blank'); результат с НЕ действительным URL:
http://localhost:4200/foo/1
Единственное решение (хак), которое я нашел, довольно жестокое:
window.open ('#' + url, '_blank');
RouterModule.forRoot(routes, {
useHash: true,
onSameUrlNavigation: 'reload',
}
showItem(item: Item) {
// THIS WORKS AS EXPECTED
this.router.navigate(['item', item.id]);
}
showItemInNewTab(item: Item) {
const url = this.router.createUrlTree(['item', item.id]).toString();
// THIS WORKS BUT ITS A HACK :/
window.open('#' + url, '_blank');
}