event.preventDefault() not working for routeChangeStart in angularjs app

angularjs, angularjs-directive, javascript, routes

Solution

I had lots of trouble finding this one, but instead of the "$routeChangeStart" event, you can listen to the "$locationChangeStart" event, for which you can prevent default:

$scope.$on("$locationChangeStart", function(event, next, current) {
    if (!confirm("You have unsaved changes, continue navigating to " + next + " ?")) {
        event.preventDefault();
    }
});

You could also always prevent default, store "next", and display a clean JS modal and decide asynchronously.

$locationChangeStart is currently undocumented but referenced here : https://github.com/angular/angular.js/issues/2109

Problem

Hope any angularjs gurus can help me with this.Here is my angularjs code ``` $scope.$on('$routeChangeStart', function(event, next, current) { if ($scope.myForm.$dirty) { if(!confirm("Unsaved, do u want to continue?")) { event.preventDefault(); } } }); ``` It alerts in browser back button click when data is dirty, but on clicking cancel or ok it still completes the route change.Seems like `event.preventDefault()` is not working. Can any one point out what may be wrong

Original source

Related problems