2016-02-18 9 views
5

$stateChangeStartイベントを見て、ユーザがブラウザBackボタンをクリックしたときにJavascript Confirmのプロンプトを表示しています。event.preventDefault()AngularjsとUIRouterを使用してブラウザの履歴を削除します

ユーザーはページ1、ページ2、ページ3から移動します。ページ3では、ユーザーがBackボタンをクリックすると、[確認]ボックスが表示されます。ユーザーがCancelボタンをクリックすると、event.preventDefault()が実行され、ユーザーは同じページにとどまります。ユーザーがもう一度Backをクリックし、もう一度OKを選択すると、ユーザーはページ1に戻ります。ページ2はどうなりましたか? event.preventDefault()は最後の履歴を削除しますか?ブラウザが前のページをスキップしないようにするにはどうすればよいですか?

$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();   
     } 
    }); 

答えて

0

ボタンをバック防止しながら歴史を維持したい場合は、代わりに$ stateChangeStart$ locationChangeStartイベントを見ていることを行う必要があります。

$ locationChangeStartとは対照的に、$ stateChangeStartとは対照的に、$ stateChangeStartは、移行が実行され、ブラウザの履歴が既に更新されているためにブロードキャストされているためです。

だから、次のように行く必要があります。

$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();   
    } 
}); 
関連する問題