Javascript 如何正确清除爱奥尼亚的历史?

Javascript 如何正确清除爱奥尼亚的历史?,javascript,cordova,ionic-framework,Javascript,Cordova,Ionic Framework,因此,我正在通过浏览器(chrome)测试我的应用程序,清除旧视图/缓存时遇到问题。这是我退出应用程序的部分: 如您所见,当我单击“注销”时,这是代码触发: Auth.$signOut().then(function(){ $ionicHistory.nextViewOptions({ disableBack: true, historyRoot: true }); $ioni

因此,我正在通过浏览器(chrome)测试我的应用程序,清除旧视图/缓存时遇到问题。这是我退出应用程序的部分:

如您所见,当我单击“注销”时,这是代码触发:

   Auth.$signOut().then(function(){
        $ionicHistory.nextViewOptions({
                disableBack: true,
                historyRoot: true
        });
        $ionicHistory.clearHistory();
        $ionicHistory.clearCache();
        $state.go('login');
   });
但当我再次尝试在登录页面中登录时,会触发以下操作:

$ionicHistory.nextViewOptions({
  disableBack: true
});
$ionicHistory.clearHistory();
$ionicHistory.clearCache();
$state.go("menu.myReports");
它也可以工作,但在我注销之前仍然可以看到相同的视图:

而不仅仅是:


每当我注销时,我想清除所有历史记录、缓存或任何东西。这可能吗?我正在使用
AngularFire
作为我的数据库。

这是一个老问题,但对于2017年或以后的任何人,我将解释到底发生了什么以及如何解决它:

$IonichStory.clearCache()的代码:

如您所见,它采用1个参数cllaed stateId,这是一个stateId数组。事实上,我很难发现stateId只不过是stateName

那么,让我们深入一点。在“instance.clearCache(StateID)”上面一行中使用的$ionicNavView.clearCache的代码是:

self.clearCache=函数(stateID){
var viewElements=$element.children();
变量viewElement、viewScope、x、l、y、eleIdentifier;
对于(x=0,l=viewmelements.length;x
`

正如您在代码中看到的,这个clearCache不会清除所有缓存,相反,它会销毁与StateID数组中的值匹配的所有缓存视图。如果没有参数,它只会破坏实际视图

因此,使用Ionic方法的解决方案是使用数组中的所有状态名作为参数调用$IonicHichStory.clearCache()

例如:

$IonichStory.clearCache(['login','map','home']); 我不敢相信任何一位离子开发者以前都没有深入研究代码,或者错过了这个简单的数据。
我希望有人能利用这一点,即使这么晚。

你在使用firebase的身份验证吗?@m1crdy是的,电子邮件和密码身份验证。
clearCache: function(stateIds) {
return $timeout(function() {
$ionicNavViewDelegate._instances.forEach(function(instance) {
instance.clearCache(stateIds);
});
});
},
self.clearCache = function(stateIds) {
var viewElements = $element.children();
var viewElement, viewScope, x, l, y, eleIdentifier;
for (x = 0, l = viewElements.length; x < l; x++) {
viewElement = viewElements.eq(x);

  if (stateIds) {
    eleIdentifier = viewElement.data(DATA_ELE_IDENTIFIER);

    for (y = 0; y < stateIds.length; y++) {
      if (eleIdentifier === stateIds[y]) {
        $ionicViewSwitcher.destroyViewEle(viewElement);
      }
    }
    continue;
  }

  if (navViewAttr(viewElement) == VIEW_STATUS_CACHED) {
    $ionicViewSwitcher.destroyViewEle(viewElement);

  } else if (navViewAttr(viewElement) == VIEW_STATUS_ACTIVE) {
    viewScope = viewElement.scope();
    viewScope && viewScope.$broadcast('$ionicView.clearCache');
  }

}
};