web-dev-qa-db-fra.com

comment déclencher une fonction à la fermeture d'une fenêtre en utilisant angularjs

J'ai besoin d'exécuter une fonction lorsque l'utilisateur ferme l'application, mais les points suivants doivent être pris en compte:

  • J'ai besoin d'exécuter une fonction d'un service, puis ...
  • ... une fonction basée sur du javascript pur et hors de portée ne sera probablement pas utile ici
  • Comme j'utilise des routes, une liaison onLocationChangeSuccess de portée 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/la fenêtre est fermée.

12
vdegenne

Vous pouvez enregistrer un onbeforeunload dans votre contrôleur/directive, puis vous aurez accès à la portée. Dans le cas d'un service, je l'enregistrerais 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>
12
Michael

Je pense que vous pouvez utiliser $ window pour lier l'événement JavaScript natif à la fermeture de la fenêtre, par exemple.

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