как вызвать функцию при закрытии окна с помощью angularjs



Мне нужно выполнить функцию, когда пользователь закрывает приложение, но необходимо учитывать следующие моменты:




  • мне нужно выполнить функцию одного service, тогда...

  • ... функция, основанная на чистом javascript вне области видимости, вряд ли будет
    полезно здесь

  • поскольку я использую маршруты, привязка с областью действия onLocationChangeSuccess является
    бесполезно также


Поэтому это решение не будет работать: https://stackoverflow.com/a/18355715/773595



Потому что это будет срабатывать каждый раз при изменении местоположения, но мне нужен только один триггер, когда вкладка/окно закрыты.

551   3  

3 ответов:

Вы можете зарегистрировать onbeforeunload в вашем контроллере / директиве, тогда у вас будет доступ к области. В случае службы я бы зарегистрировал его в угловом.запустить жизненный цикл.

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>

Я думаю, что вы можете использовать $window для привязки собственного события javascript при закрытии окна например

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

Эта работа?

Onbeforeunload не только срабатывает при закрытии окна, но и происходит, когда пользователь обновляет окно (ctrl+f5). И если вы используете $window.при загрузке функция никогда не будет выполнена, так как окно будет закрыто перед выполнением кода функции.

Comments

    Ничего не найдено.