Angular 7路由器 - 在不添加历史记录的情况下导航

27

使用Angular Router,我想导航到另一个URL而不将其添加到浏览器历史记录中。

this.router.navigateByUrl(`${pathWithoutFragment}#${newFragment}`);

仅使用Angular,我能做到吗?

2个回答

51

感谢NavigationExtras,现在您可以在navigate()内使用replaceUrl: boolean

这将替换当前URL,并且新的URL会更新到地址栏中:

this.router.navigate([`/somewhere`], { replaceUrl: true });

这样当您按下“返回”时,它将不会记住历史记录中的上一页。


8

如@IngoBürk在评论中提到的,您可以在不使用skiplocationChange的情况下实现相同的结果

 this.router.replaceUrl('path')

skipLocationChange

在不向历史记录中添加新状态的情况下导航。

this.router.navigateByUrl([`${pathWithoutFragment}#${newFragment}`], { skipLocationChange: true });

Ref:https://angular.io/api/router/NavigationExtras#skipLocationChange


2
我认为replaceUrl是正确的答案。skipLocationChange也不会更新URL,而且这似乎不是OP想要的。 - Ingo Bürk
1
我不明白你的编辑与我的评论有什么关系?我的意思是使用replaceUrl而不是skipLocationChange。这也是NavigationExtras的一个选项。 - Ingo Bürk
3
不,它替换了状态。这意味着URL将在地址栏中更新,但堆栈上没有新事件,因此单击返回按钮会导航到与没有进行该导航相同的前一页。如果您使用skipLocationChange,您也会获得这种效果,但是URL不会在地址栏中更新。 - Ingo Bürk
你的新编辑还是有错。你需要使用replaceUrl。现在你只是编辑成了没有任何标志的普通导航。我现在要停止尝试解释这个问题,我认为已经非常清楚了... - Ingo Bürk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接