Как сообщить маршрутизатору пропустить предыдущий URL в Angular [duplicate]

Создание экземпляра интерфейса дает более четкое разделение между вашим кодом и реализацией потоков, поэтому я предпочел бы реализовать Runnable в этом случае.

22
задан pleerock 11 August 2016 в 08:23
поделиться

2 ответа

Вы хотите использовать replaceState из класса Locations

https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!# replaceState-якорь

2
ответ дан Gary 20 August 2018 в 10:18
поделиться
  • 1
    да, я видел это api, но мне нужно api от маршрутизатора, чтобы убедиться, что маршрутизатор работает и обновляется плавно – pleerock 11 August 2016 в 16:02
  • 2

Если вы используете

router.navigate

, а затем

location.replaceState

С помощью того же самого пути вы можете инициировать изменения, которые обычно происходят, а также заменять историю.

Например, в вашем случае:

this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');

Если вам нужно добавить параметры к маршруту, вы можете создать URL для местоположения с помощью

router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));

В вашем примере:

this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));

Обновить

Кажется, что теперь угловой маршрутизатор поставляется с опцией replace url . В вашем примере:

this.router.navigate(["questions/1"], {replaceUrl:true});

Обновление 2

Существует текущая проблема , где несколько навигаций, выполненных за короткий промежуток времени, не могут заменить URL-адрес правильно. В качестве временного решения оберните функцию навигации в тайм-аут, чтобы каждый из них загорелся в отдельном цикле:

setTimeout(()=>{
    this.router.navigate(["questions/1"], {replaceUrl:true});
});
45
ответ дан Jason 20 August 2018 в 10:18
поделиться
  • 1
    Хорошо объяснил и работает нормально. благодаря – Mikel 6 September 2017 в 07:05
  • 2
    Примечание. Для директив routerLink вы можете добавить атрибут replaceUrl к элементу для того же эффекта. – dokkaebi 24 October 2017 в 17:01
  • 3
    Единственное предостережение от использования router.navigate и { replaceUrl: true } - это регистрация другого события навигации. Если вы слушаете события навигации (например, NavigationEnd) и не хотите запускать два события, location.replaceState выполнит трюк. – Alan 1 November 2017 в 15:27
Другие вопросы по тегам:

Похожие вопросы: