2016-11-30 31 views
1

所以我通過瀏覽器(chrome)測試我的應用程序,並且在清除舊視圖/緩存時出現問題。因此,這是我籤我的應用程序出了一部分:如何正確清除離子中的歷史?

enter image description here

正如你可以看到,當我點擊註銷,這是代碼點火:

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

它也可以,但我仍然看到此相同的觀點之前,我登出:

enter image description here

而不只是:

enter image description here

我想明確每個歷史,緩存或任何每當我登出。這甚至可能嗎?我正在爲我的數據庫使用AngularFire

+1

您使用的是來自Firebase的身份驗證嗎? – m1crdy

+0

@ m1crdy是的,電子郵件和密碼驗證。 – FewFlyBy

回答

1

嗯,這是一個老問題,但對任何人的到來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開發者之前沒有深入到代碼中,或者錯過了這個簡單的數據。 我希望有人利用這一點,即使這麼晚。

+1

哇。最後。這實際上工作! – FewFlyBy