Ich habe ein Javascript-Objekt, das ich global zu meinem angularjs Anwendung brauche. Wenn die Anwendung entladen wird (aufgrund einer Seitenaktualisierung oder eines anderen Szenarios), möchte ich das Objekt im Browser speichern. Ich glaube, das Hinzufügen des Objekts zu $ rootScope würde die erste Anforderung erfüllen, das Objekt global zu machen, aber das Schreiben des Objekts in den Speicher während des Ereignisses onbeforeunload
würde den Zugriff auf die Variable $ rootScope erfordern. Ist es möglich, ein Seitenentladeereignis in angularjs zu erkennen?Erkennung der Seite entladen in angularjs
Antwort
Das sollte es tun, aber ich schlage auch vor, $rootScope
zu vermeiden, da der globale Zustand entmutigt wird, und Sie könnten auch localStorage
in einem Dienst umhüllen, so dass es injiziert und zum Testen verspottet werden kann.
.run([
'$window',
'$rootScope',
function($window, $rootScope) {
$window.addEventListener('beforeunload', function() {
localStorage.myValue = $rootScope.myValue;
});
}
]);
Danke. Und wäre das Ereignis zum Laden der Seite "Laden"? – user1491636
@ user1491636 Ich denke nicht, dass Sie dieses Ereignis verwenden sollten. Wenn Sie möchten, dass etwas zu Beginn Ihrer Angular-App ausgeführt wird, fügen Sie es einfach in einen "run" -Block ein, wie in meinem Beispiel hier. – m59
Ihre Lösung löst das Problem nicht, denn selbst wenn Sie auf Abbrechen klicken, wird sie aufgerufen. –
haben Sie mit so etwas in Betracht gezogen wie https://github.com/grevory/angular-local-storage oder https://github.com/gsklee/ngStorage – Vadim