如何处理/阻止浏览器导航或在angularjs中重新加载?

时间:2014-07-30 15:01:31

标签: javascript angularjs

当用户离开或重新加载页面时,我想在我的角度应用中检测到。

应用程序(使用一些登录过程)应该区分它已被重新加载,因此用户不会丢失他的身份验证数据,应用程序应该能够从localStorage恢复必要的信息。

请提供一些“处理”浏览器重新加载/导航的最佳技巧。

2 个答案:

答案 0 :(得分:21)

重新加载时,所有javascript和内存变量都会消失。在js中,您知道第一次再次运行代码时页面已重新加载。

要处理重装本身(包括点击F5)并在重新加载甚至取消之前采取行动,请使用'beforeunload'事件。

var windowElement = angular.element($window);
windowElement.on('beforeunload', function (event) {
    // do whatever you want in here before the page unloads.        

    // the following line of code will prevent reload or navigating away.
    event.preventDefault();
});

答案 1 :(得分:2)

我遇到了同样的问题,但Ben的回答并不适用于我。

This answer让我走上正轨。我想在某些州添加警告,但不是全部。我是这样做的(可能不是最干净的方式):

window.onbeforeunload = function(event) {
   if ($state.current.controller === 'ReloadWarningController') {
      // Ask the user if he wants to reload
      return 'Are you sure you want to reload?'
   } else {
      // Allow reload without any alert
      event.preventDefault()
   }
 };

(在ReloadWarningController定义中,注入了$state