Ответ 1
Если вы используете
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"}])));
Update
Кажется, маршрутизатор angular теперь поставляется с заменить параметр URL. В вашем примере:
this.router.navigate(["questions/1"], {replaceUrl:true});
Обновление 2
Существует текущий issue, где несколько навигаций, выполненных за короткий промежуток времени, могут неправильно заменить URL. В качестве временного обхода оберните функцию навигации в тайм-аут, чтобы каждый из них загорелся в отдельном цикле:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});