嗯,這是一個老問題,但對任何人的到來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