Ich habe eine einfache eckige App, die zwei Ansichten hat, die mit ngRoute geladen werden. Ich muss etwas auf dem Server aufräumen, wenn der Benutzer zwischen Ansichten navigiert und wenn der Benutzer die Seite verlässt (Fenster wird aktualisiert, Tab geschlossen oder Browser geschlossen).Wie wird eine HTTP-Anfrage gesendet, bevor in AngularJS geladen wird?
Mein erster Halt war hier: Showing alert in angularjs when user leaves a page. Es löste den ersten Fall, in dem der Benutzer zwischen Ansichten navigiert. Ich habe die Reinigung wie folgt behandelt:
$scope.$on('$locationChangeStart', function (event) {
var answer = confirm("Are you sure you want to leave this page?")
if (answer) {
api.unlock($scope.id); //api is a service that I wrote. It uses angular $http service to handle communications and works in all other cases.
} else {
event.preventDefault();
}
});
Allerdings war ich nicht in der Lage, den Fall zu behandeln, wo der Benutzer die Seite verlässt. Im Anschluss an die oben genannte Antwort und diesen Beitrag Google Groups: https://groups.google.com/forum/#!topic/angular/-PfujIEdeCY Ich versuchte dies:
window.onbeforeunload = function (event) {
api.unlock($scope.id); //I don't necessarily need a confirmation dialogue, although that would be helpful.
};
Aber es hat nicht funktioniert. Dann habe ich hier gelesen: How to execute ajax function onbeforeunload?, dass die Anfrage synchron sein muss und hier: How to $http Synchronous call with AngularJS, dass Angular dies nicht unterstützt (obwohl diese möglicherweise veraltet ist).
Ich habe auch versucht, $ http direkt (ohne den Dienst) aufzurufen, aber das hat auch nicht funktioniert. An diesem Punkt stecke ich fest. Irgendwelche Vorschläge/Leads würden wirklich geschätzt werden.
Vielen Dank im Voraus!
Sie könnten die Information anzeigen, dass Daten verloren gehen, wenn der Benutzer jetzt weg navigiert, geben Sie einfach eine Zeichenfolge innerhalb des onbeforeunload-Handlers zurück. – Sebastian