Javascript 如何使用angularjs在窗口关闭时触发函数

Javascript 如何使用angularjs在窗口关闭时触发函数,javascript,angularjs,events,Javascript,Angularjs,Events,当用户关闭应用程序时,我需要执行一个函数,但需要考虑以下几点: 我需要执行一个服务的功能,然后 。。。不太可能使用范围外的纯javascript函数 这里有用 当我使用路由时,需要一个作用域onLocationChangeSuccess绑定 也没用 因此,此解决方案不起作用: 因为这将在每次位置更改时触发,但当选项卡/窗口关闭时,我只需要一个触发器。您可以在控制器/指令中注册onbeforeunload,然后您就可以访问范围。如果是服务,我会在angular.run生命周期中注册它 ang

当用户关闭应用程序时,我需要执行一个函数,但需要考虑以下几点:

  • 我需要执行一个
    服务的功能
    ,然后
  • 。。。不太可能使用范围外的纯javascript函数 这里有用
  • 当我使用路由时,需要一个作用域
    onLocationChangeSuccess
    绑定 也没用
因此,此解决方案不起作用:


因为这将在每次位置更改时触发,但当选项卡/窗口关闭时,我只需要一个触发器。

您可以在控制器/指令中注册onbeforeunload,然后您就可以访问范围。如果是服务,我会在angular.run生命周期中注册它

angular.module('app',[])
.controller('exitController',函数($scope,$window){
$scope.onExit=函数(){
返回(“再见”);
};
$window.onbeforeunload=$scope.onExit;
});

我认为可以在窗口关闭时使用$window绑定本机javascript事件 e、 g

这工作


onbeforeunload不仅在窗口关闭时触发,在用户刷新窗口时也会触发(ctrl+f5)。如果您使用$window.onunload,函数将永远不会执行,因为在执行函数的代码之前,窗口将关闭。

您能给我们看一些您尝试过的代码吗?哎呀,看起来Michael answer和我的是一样的,这个方法会在一些浏览器(如Firefox)上触发警报如果不必从视图调用此函数,则不需要污染作用域的公共命名空间。请参阅user4919812的解决方案。您如何区分浏览器关闭和刷新?@Michael,如果直接单击浏览器选项卡的关闭按钮会怎么样?@Michael,感谢它对“窗口关闭”很有效,但是当我刷新页面时,会调用相同的函数,那么还有其他解决方案吗?
app.controller('myCtrl', ['$window', '$myService', function ($window, $myService) {
  $window.onbeforeunload = function (evt) {
    $myService.onclose();
  }
}]);