2016-02-18 14 views
5

Po kliknięciu przycisku przeglądarki wyświetlany jest monit w formacie JavaScript Confirm, oglądając wydarzenie $stateChangeStart. Rozważ następujące:event.preventDefault() z Angularjs i Uirouter usuwa historię przeglądarek

Użytkownicy przechodzą ze strony 1, 2, a następnie strony 3. Na stronie 3 użytkownik klika przycisk Back, a następnie wyświetla pole Potwierdź. Użytkownik klika przycisk Cancel, event.preventDefault(), a użytkownik pozostaje na tej samej stronie. Następnie, jeśli użytkownik ponownie kliknie Back i wybierze po raz drugi OK, użytkownik zostanie przeniesiony z powrotem na stronę 1. Co się stało ze stroną 2? Czy event.preventDefault() usuwa ostatnią historię? Jak zapobiec przeglądaniu poprzedniej strony przez przeglądarkę?

$rootScope.$on('$stateChangeStart', 
    function (event, toState, toParams, fromState, fromParams) { 
     var retVal = confirm("You have unsaved changes. If you leave the page, these changes will be lost."); 
     if (retVal == false) { 
      // user wants to cancel navigating back. 
      event.preventDefault();   
     } 
    }); 

Odpowiedz

0

Jeśli chcesz zachować historię zapobiegając jednocześnie przycisk Wstecz kliknij trzeba zrobić, że oglądanie $ locationChangeStart imprezę zamiast $ stateChangeStart.

Dzieje się tak dlatego, że $ stateChangeStart w przeciwieństwie do $ locationChangeStart jest broadcased po wykonaniu przejścia i historia przeglądarki jest już zaktualizowana.

Tak powinno to wyglądać tak:

$rootScope.$on('$locationChangeStart', function(event, next) { 
    var retVal = confirm("You have unsaved changes. If you leave the page, these changes will be lost."); 
    if (retVal == false) { 
     // user wants to cancel navigating back. 
     event.preventDefault();   
    } 
});