Dies auf vielfältige Weise erreicht werden könnte,
1- Verwenden $ locationChangeStart Technik und überprüfen, ob diese vor der Anzeige Nachricht aktuelle Standort ist. Beispiel unten
$scope.$on('$locationChangeStart', function(event, next, current) {
// match Current URL and If it true show message.
if (current.match("\/yourCurrentRoute")) {
var answer = confirm("Are you sure you want to leave this page?");
if (!answer) {
event.preventDefault();
}else {
//Do whatever else you want to do
}
}
});
2- Falls Sie Ui-Router verwenden, es hat onExit Rückruf-Option, Beispiel unten
$stateProvider.state("contacts", {
template: "<h1>{{title}}</h1>",
resolve: { title: 'My Contacts' },
controller: function($scope, title){
$scope.title = title;
},
onExit: function(title){
if(title){ ... do something ... }
}
})
3 - gibt es eine nicht-Winkel Art und Weise, es zu tun auch.
window.onbeforeunload = function (event) {
var message = 'Sure you want to leave?';
if (typeof event == 'undefined') {
event = window.event;
}
if (event) {
event.returnValue = message;
}
return message;
}
4 - Verwenden Sie diese Anweisung, wenn diese Seite ein Formular enthält. Sie wird automatisch bereinigt, wenn das Formular entladen wird. Wenn Sie verhindern möchten, dass die Eingabeaufforderung ausgelöst wird (z. B. weil Sie das Formular erfolgreich gespeichert haben), rufen Sie $ scope.FORMNAME auf. $ SetPristine(), wobei FORMNAME der Name des Formulars ist, das Sie verhindern möchten.
.directive('dirtyTracking', [function() {
return {
restrict: 'A',
link: function ($scope, $element, $attrs) {
function isDirty() {
var formObj = $scope[$element.attr('name')];
return formObj && formObj.$pristine === false;
}
function areYouSurePrompt() {
if (isDirty()) {
return 'You have unsaved changes. Are you sure you want to leave this page?';
}
}
window.addEventListener('beforeunload', areYouSurePrompt);
$element.bind("$destroy", function() {
window.removeEventListener('beforeunload', areYouSurePrompt);
});
$scope.$on('$locationChangeStart', function (event) {
var prompt = areYouSurePrompt();
if (!event.defaultPrevented && prompt && !confirm(prompt)) {
event.preventDefault();
}
});
}
};
}]);
5- es gibt eine andere Möglichkeit, $ destroy zu verwenden, es wird gefeuert, wenn der Controller zerstört wird, schreibe es in den Controller.
$scope.$on('$destroy', function() {
// display error message
});
sollten Sie überprüfen, http://plnkr.co/edit/YWr6o2?p=preview –
aber ich müsste genau das opposite- wenn ich eine Seite verlassen, als ich ein Ereignis benötigen würde und nicht beim Eintritt. – quma