Comment déclencher une fonction sur la fermeture de la fenêtre en utilisant angularjs

Je dois exécuter une fonction lorsque l'utilisateur ferme l'application, mais les points suivants doivent être pris en considération:

  • Je dois exécuter une fonction d'un service , puis …
  • … une fonction hors-scoped pure-javascript n'est pas susceptible d'être utile ici
  • Comme j'utilise les itinéraires, une liaison sur le onLocationChangeSuccess est également inutile

Par conséquent, cette solution ne fonctionnera pas: https://stackoverflow.com/a/18355715/773595

Parce que cela sera déclenché chaque fois que l'emplacement change, mais ce dont j'ai besoin n'est qu'un déclencheur lorsque l'onglet / fenêtre est fermé.

Vous pouvez enregistrer une surcharge sur votre contrôleur / directive, puis vous aurez accès à la portée. Dans le cas d'un service, je l'enregistrais dans le cycle de vie angular.run.

 angular.module('app', []) .controller('exitController', function($scope, $window) { $scope.onExit = function() { return ('bye bye'); }; $window.onbeforeunload = $scope.onExit; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="exitController"> <a href="http://www.disney.com">Leave page</a> </div> 

Je pense que vous pouvez utiliser $ window pour lier l'événement javascript natif sur la fenêtre close eg

 app.controller('myCtrl', ['$window', '$myService', function ($window, $myService) { $window.onbeforeunload = function (evt) { $myService.onclose(); } }]); 

Ce travail?

Onforeunload, non seulement déclenche lorsque la fenêtre se ferme, mais aussi lorsque l'utilisateur actualise la fenêtre (ctrl + f5). Et si vous utilisez $ window.onunload, la fonction ne sera jamais exécutée car la fenêtre sera fermée avant d'exécuter le code de la fonction.