因此,我正在通过浏览器(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年或以后的所有人,我将解释真正发生的情况以及如何解决:
$ 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开发人员以前没有研究过代码,或者错过了这个简单的数据。
我希望有人能利用这一点,即使太晚了。