Skip to content

Instantly share code, notes, and snippets.

@antonioaguilar
Forked from schmuli/example.html
Created December 6, 2015 00:08
Show Gist options
  • Save antonioaguilar/9ca2e9ede60ea8482bf9 to your computer and use it in GitHub Desktop.
Save antonioaguilar/9ca2e9ede60ea8482bf9 to your computer and use it in GitHub Desktop.
A simple AngularJS service for handling the 'onbeforeunload' event
<!DOCTYPE html>
<html data-ng-app="TestApp">
<head>
<script src="http://code.angularjs.org/1.2.9/angular.js"></script>
<script>
angular.module('TestApp', [])
.factory('beforeUnload', function ($rootScope, $window) {
// Events are broadcast outside the Scope Lifecycle
$window.onbeforeunload = function (e) {
var confirmation = {};
var event = $rootScope.$broadcast('onBeforeUnload', confirmation);
if (event.defaultPrevented) {
return confirmation.message;
}
};
$window.onunload = function () {
$rootScope.$broadcast('onUnload');
};
return {};
})
.run(function (beforeUnload) {
// Must invoke the service at least once
});
function TestController($scope) {
$scope.$on('onBeforeUnload', function (e, confirmation) {
confirmation.message = "All data willl be lost.";
e.preventDefault();
});
$scope.$on('onUnload', function (e) {
console.log('leaving page'); // Use 'Preserve Log' option in Console
});
}
</script>
</head>
<body data-ng-controller="TestController">
This is a test
<a href="http://www.google.com/">Google</a>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment