如何正确地清除离子历史?

时间:2016-11-30 05:03:29

标签: javascript cordova ionic-framework

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

enter image description here

正如您所看到的,当我单击Log out时,这就是代码触发:

/oauth/token

当我尝试再次登录我的登录页面时,这是有效的,这就是火灾:

   Auth.$signOut().then(function(){
        $ionicHistory.nextViewOptions({
                disableBack: true,
                historyRoot: true
        });
        $ionicHistory.clearHistory();
        $ionicHistory.clearCache();
        $state.go('login');
   });

它也有效,但在我退出之前我仍然看到同样的观点:

enter image description here

而不仅仅是:

enter image description here

每当我退出时,我想清除所有历史记录,缓存或其他内容。这甚至可能吗?我使用$ionicHistory.nextViewOptions({ disableBack: true }); $ionicHistory.clearHistory(); $ionicHistory.clearCache(); $state.go("menu.myReports"); 作为我的数据库。

1 个答案:

答案 0 :(得分:2)

这是一个老问题,但对于2017年或之后的任何人,我将解释实际发生的事情以及如何解决它:

$ ionicHistory.clearCache()的代码:

clearCache: function(stateIds) {
return $timeout(function() {
$ionicNavViewDelegate._instances.forEach(function(instance) {
instance.clearCache(stateIds);
});
});
},

因此,正如您所看到的,它需要1个参数cllaed stateIds,它是一个stateId数组。事实上,我努力发现stateId只不过是stateName。

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

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');
  }

}
};

`

正如您在代码中看到的,此clearCache不会清除所有缓存,而是销毁所有与stateIds数组中的值匹配的缓存视图。如果没有参数,则只能破坏实际视图。

因此,仅使用Ionic方法的解决方案是将$ ionicHistory.clearCache()与数组中的所有州名称作为参数调用。

E.g:

$ ionicHistory.clearCache(['login','map','home']); 我不能相信任何Ionic开发人员之前没有挖过代码,或者错过了这个简单的datail。 我希望有人能利用这一点,即使是这么晚。