嗯,这是一个老问题,但对任何人的到来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([ '登录', '映射', '家庭']); 我无法相信任何Ionic开发者之前没有深入到代码中,或者错过了这个简单的数据。 我希望有人利用这一点,即使这么晚。
您使用的是来自Firebase的身份验证吗? – m1crdy
@ m1crdy是的,电子邮件和密码验证。 – FewFlyBy