createUrlTree игнорирует конфигурацию RouterModule «useHash: true» - PullRequest
0 голосов
/ 27 июня 2019

В одностраничном приложении 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');
}

...