使用onBeforeUnload破坏了Angular中的浏览器历史记录

时间:2018-09-19 04:14:15

标签: angular onbeforeunload angular-router angular-router-guards

当用户在页面上完成数据输入后,我希望他们返回上一页(例如,“主页”->“输入页面”)。如果我在他们单击提交时重定向它们,那么我将得到一个循环历史记录(主页->输入页->主页)。因此,当用户单击“提交”时,我将呼叫window.history.back()

为防止数据丢失,我监听了beforeUnload事件。如果用户尚未提交表单,则提示我确保他们知道自己将丢失所做的更改。

我遇到的问题是,如果用户尝试不提交数据就返回,请单击“取消”停留在页面上,然后单击“提交”。他们的第一次击退被取消,然后在提交后我执行履历(back),但是最后返回历史中的2项而不是1。这几乎就像取消前一个URL时一样(主页)一起从历史记录堆栈中删除。因此,点击“提交”会越过该页面,然后返回“新标签页”。

我知道堆栈管理非常困难,但是如果用户取消onBeforeUnload留在页面上并提交匹配,就无法弄清楚如何转到上一个URL。似乎用户是否取消了它,当我调用history.back()时,它应该返回主页。

1 个答案:

答案 0 :(得分:0)

我发现我的问题与Angular有关,而我在问题中没有提及。出现Angular navigation gets screwed up when a CanDeactivate guard cancels a navigation。有一项拟议的工作似乎对我有用。