2016-11-30 4 views
1

Итак, я тестирую свое приложение через браузер (хром), и у меня проблемы с очисткой старых просмотров/кеша. Таким образом, это та часть, где я подписываю из моего приложения:Как правильно очистить историю в ионной?

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

Вы используете auth из 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.

Итак, давайте углубимся. Код $ ionicNavView.clearCache который используется в строке выше «instance.clearCache (stateIds)» является:

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 не проясняет ALL CACHES, вместо этого он уничтожает все кэшированные представления, которые соответствуют значению в массиве stateIds. Если нет параметров, ТОЛЬКО ПРОЙДЕТ ФАКТИЧЕСКИЙ ВЗГЛЯД.

Таким образом, решение для этого, используя только ионный способ, заключается в вызове $ ionicHistory.clearCache() со всеми вашими именами состояний в массиве в качестве параметра.

например:

$ ionicHistory.clearCache ([ 'Войти', 'карта', 'дом']); Я не могу поверить, что какой-либо Ionic разработчик не врывался в код раньше или пропустил эту простую дату. Надеюсь, кто-то воспользуется этим, даже опаздывая.

+1

Ничего себе. В заключение. Это действительно сработало! – FewFlyBy

Смежные вопросы