I\'m a newbie to angularjs.Is there any way to show alert when a form has unsaved data and user presses browser back button. Any pointers to how to achieve this would be app
Yes, I just gave this answer some minutes ago to another user, create a watch at root scope level to catch location changing:
$rootScope.$watch(function() { // fixed function declaration
return $location.path();
},
function(newValue, oldValue) {
if (newValue != oldValue) { // Update: variable name case should be the same
// here you can do your tasks
}
else {
}
},
true);
As you've discovered, you can write a custom directive to watch for changes. Your updated code is on track, however there are a few things you could do to improve:
Your directive references the form by name, which limits it's re-usability. For example, what if you wanted to use this same directive on a form called myOtherForm
? Currently using $scope.myForm.$dirty
limits this flexibility. Instead, a better approach is to bind to the formController in your linking function.
There really isn't a need to watch $location.path()
since binding to $locationChangeStart
will do the same thing.
I've written an angularjs directive that you can uses the approaches I've discussed above. @see https://github.com/facultymatt/angular-unsavedChanges
Hopefully you find this directive informative. Feel free to learn from it or even use it in your project.