2015-05-20 26 views
11

muszę wykonać funkcję, gdy użytkownik zamyka aplikację, ale dodaje się punkty, które należy rozważyć:jak wywołać funkcję w oknie zamknięciu za pomocą angularjs

  • muszę wykonać funkcję jednego service , a następnie ...
  • ... funkcja bazie czystego javascript-out-scoped nie jest prawdopodobne, aby być przydatnych tutaj
  • Ponieważ używam tras, o scoped onLocationChangeSuccess wiążący jest bezużyteczny jak również

więc to rozwiązanie nie będzie działać: https://stackoverflow.com/a/18355715/773595

Ponieważ to zostanie wywołany spędzaj zmianę lokalizacji, ale to, co potrzebne jest tylko jeden spust, gdy okno/karta jest zamknięta.

+0

Czy możesz pokazać nam jakiś fragment kodu, który próbujesz? – forgottofly

Odpowiedz

11

Możesz zarejestrować onbeforeunload w kontrolerze/dyrektywie, wtedy będziesz mieć dostęp do zakresu. W przypadku usługi rejestrowałbym ją w cyklu życia 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>

+0

który działał zgodnie z oczekiwaniami! dzięki – user544262772

+1

Nie musisz zanieczyszczać publicznej przestrzeni zasięgu teleskopu, jeśli nie musisz wywoływać tej funkcji również z widoku. Zobacz rozwiązanie user4919812. – vsp

+0

Jak odróżnić zamknięcie przeglądarki od odświeżenia? – Ben

6

myślę, że można użyć $ okno wiązać natywny javascript wydarzenie w oknie blisko np

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

whoops, wygląda jak Michael i moja odpowiedź są takie same –

+0

Niestety, ta metoda wywoła alert w niektórych przeglądarkach (np. Firefox) – aguadoe

-3

Ta praca?

Funkcja onbeforeunload nie tylko uruchamia się po zamknięciu okna, ale dzieje się również, gdy użytkownik odświeży okno (ctrl + f5). A jeśli użyjesz $ window.onunload, funkcja nigdy nie zostanie wykonana, ponieważ okno zostanie zamknięte przed wykonaniem kodu funkcji.

Powiązane problemy