2016-11-30 49 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