web-dev-qa-db-ja.com

履歴からページを削除して、「戻る」が適切に機能するようにします

他のページにアクセスするにはログインする必要があるアプリがあります。

最初のページは「ログイン」であり、すでにログインしているかどうかを確認します。ログインしている場合はメインページアプリにリダイレクトされ、そうでない場合はログインページが表示されます。

現在、問題はユーザーがログインしたページ領域内にあり、クリックして「ログイン」ページに移動し、すでにログインしているためにメインページにリダイレクトされることです。

そのため、彼は無限ループに陥っています。

ログインページを履歴から削除するにはどうすればよいですか。

Android "Androidが履歴スタックからアクティビティを削除する"のように

21
Tzook Bar Noy

ここに解決策があります!

単に使用します:

  $ionicHistory.nextViewOptions({
     disableBack: true
  });

ログイン機能の例:

$scope.login = function () {

Security.login($scope.cred.email, $scope.cred.password)
    .success(function(data) {
        Security.setUser(data.data[0]);
        $ionicHistory.nextViewOptions({
            disableBack: true
        });
        $state.go('posts', {}, {location: "replace", reload: true});
    }).error(function(data) {
        $scope.showAlert();
    });
};
34
Tzook Bar Noy

これを達成するための純粋なAngularJSの方法(ionicまたは他の回答のjavascriptではなく)の場合、$ locationサービスのreplace()メソッドを使用してください( documentation ):

通常、角度でリダイレクトを行う場合と同様に、$location.url('/newpath');または$location.path('/newpath');を使用します。そしてその直後に$location.replace();を追加します。または、次のようにコマンドを連鎖できます。

$location.url('/newpath').replace();
22
Rebecca

クイック検索: https://stackoverflow.com/a/8969975/185672

トップアンサー:

_window.location = url;_を使用してリダイレクトする代わりに、

window.location.replace(url);を試してください。

replace()を使用した後、現在のページはセッション履歴に保存されません。つまり、ユーザーは[戻る]ボタンを使用してそのページに移動することはできません。

3
Phil