Angular 2 - заменить историю, а не нажимать

Как заменить историю вместо нажатия нового в angular 2 новых маршрутизатора (rc.1)?

Например, Im в списке вопросов (/questions), открывая новый модальный в новом маршруте (/info/add), и после добавления нового вопроса я перехожу к представлению вопроса (/info/1). Если я вернусь назад, я хотел бы перейти к /questions вместо /info/add

Ответ 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});
});