5

嗨,我对离子登录和注销有疑问。

每次注销后,我仍然可以单击返回按钮,它会带我回到上一页。我可以知道如何在注销时清除或删除会话,以便用户无法从登录返回上一页吗?

var default_stat;
$scope.logout = function(){
    $ionicLoading.show({template:'Logging out....'});
    $localstorage.set('loggin_state', '');
    $state.go('login');
    $ionicLoading.hide();
    $ionicHistory.clearHistory();
    $ionicHistory.clearCache();
};

在登录期间,我使用 localstorage 来指示用户已登录

$localstorage.set('loggin_state', '1');
4

3 回答 3

14

我会做这样的事情:

$scope.logout = function(){
    $ionicLoading.show({template:'Logging out....'});
    $localstorage.set('loggin_state', '');

    $timeout(function () {
        $ionicLoading.hide();
        $ionicHistory.clearCache();
        $ionicHistory.clearHistory();
        $ionicHistory.nextViewOptions({ disableBack: true, historyRoot: true });
        $state.go('login');
        }, 30);

};

我发现添加一点延迟可以$ionicHistory清除缓存。

$ionicHistory.nextViewOptions({ disableBack: true, historyRoot: true });
  • disableBack:下一个视图应该忘记它的后视图,并将其设置为 null。
  • historyRoot:下一个视图应该成为其历史堆栈中的根视图。
于 2015-05-29T08:15:49.333 回答
5

$ionicHistory.clearCache()现在返回承诺,因此您可以确保清除缓存。所以你可以这样调用:

$ionicHistory.clearCache().then(function() {
    //now you can clear history or goto another state if you need
    $ionicHistory.clearHistory();
    $ionicHistory.nextViewOptions({ disableBack: true, historyRoot: true });
    $state.go('login');
})

不需要上述超时之类的东西。

功劳归于

于 2015-11-27T20:33:17.657 回答
2

这是因为ionic正在缓存视图,所以这将阻止离子通过控制器。

所以你可以按如下方式破坏缓存

<ion-view cache-view="false" view-title="My Title!">
  ...
</ion-view> 

在这里阅读更多

于 2015-05-29T04:05:21.087 回答