web-dev-qa-db-ja.com

angularjsを使用してウィンドウを閉じるときに関数をトリガーする方法

ユーザーがアプリケーションを閉じたときに関数を実行する必要がありますが、次の点を考慮する必要があります。

  • serviceの関数を実行する必要があります...
  • ...範囲外のpure-javascriptベースの関数はここでは役に立たない可能性が高い
  • ルートを使用しているので、スコープ付きonLocationChangeSuccessバインディングも役に立たない

したがって、このソリューションは機能しません: https://stackoverflow.com/a/18355715/773595

これは場所が変わるたびにトリガーされるためですが、必要なのは、タブ/ウィンドウが閉じられたときにトリガーが1つだけになることです。

12
vdegenne

コントローラ/ディレクティブにonbeforeunloadを登録すると、スコープにアクセスできます。サービスの場合、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

$ windowを使用して、ウィンドウを閉じるときにネイティブjavascriptイベントをバインドできると思います。

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