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

javascript - 如何正确清除 ionic 历史?-LMLPHP

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

   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");


它也可以工作,但是在注销之前我仍然看到相同的视图:

javascript - 如何正确清除 ionic 历史?-LMLPHP

不仅仅是:

javascript - 如何正确清除 ionic 历史?-LMLPHP

我想在登出时清除所有历史记录,缓存或其他内容。那有可能吗?我在数据库中使用AngularFire

最佳答案

好吧,这是一个老问题,但是对于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数组中的值匹配的所有缓存视图。如果没有参数,则仅销毁实际视图。

因此,仅使用离子方式的解决方案是调用$ ionicHistory.clearCache(),将数组中的所有状态名称作为参数。

例如:

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

07-28 09:16