所以我通过浏览器(chrome)测试我的应用程序,我在清除旧视图/缓存时遇到问题。所以这是我退出应用程序的部分:
正如您所看到的,当我单击Log out时,这就是代码触发:
/oauth/token
当我尝试再次登录我的登录页面时,这是有效的,这就是火灾:
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");
作为我的数据库。
答案 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。 我希望有人能利用这一点,即使是这么晚。