Создание экземпляра интерфейса дает более четкое разделение между вашим кодом и реализацией потоков, поэтому я предпочел бы реализовать Runnable в этом случае.
Вы хотите использовать replaceState из класса Locations
https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!# replaceState-якорь
Если вы используете
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});
Существует текущая проблема , где несколько навигаций, выполненных за короткий промежуток времени, не могут заменить URL-адрес правильно. В качестве временного решения оберните функцию навигации в тайм-аут, чтобы каждый из них загорелся в отдельном цикле:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
replaceUrl
к элементу для того же эффекта.
– dokkaebi
24 October 2017 в 17:01
router.navigate
и { replaceUrl: true }
- это регистрация другого события навигации. Если вы слушаете события навигации (например, NavigationEnd
) и не хотите запускать два события, location.replaceState
выполнит трюк.
– Alan
1 November 2017 в 15:27