Во-первых, я думаю, что общая проблема здесь заключается в том, что у AngularJS по-прежнему нет разумного, наилучшего способа "перезапуска" приложения и всех его компонентов. Пока что лучшая практика, похоже, устанавливает путь к представлению "по умолчанию", а затем перезагружает окно. Мы делаем это в нашем /logout состоянии, как показано здесь:
$stateProvider.state('logout', {
onEnter: function($state, $window, store) {
//Remove any session variables
store.remove('varA');
store.remove('varB');
//"Logout" the user
$state.go('login');
$window.location.reload();
}
})
Однако это плохой пользовательский интерфейс. Пользователь может фактически увидеть изменение вида и компоненты на смене страницы перед перезагрузкой окна. Похоже, что это очень багги.
Первоначально мы не включали $state.go('login')
и не получали странного опыта просмотра изменения вида перед выходом из системы. Однако, когда мы начали использовать $ state обработчики, такие как $rootScope.$on('$stateChangeStart', function (event, toState, toParams)
, мы заметили, что toState
не перезагружается после перезагрузки окна. Таким образом, $stateChangeStart
запускается после reload и toState
будет по-прежнему настроен на любой вид, который был toState
пользователем перед вызовом /logout
. Это не настоящий сброс приложения!
Возможное решение. Я думаю, что все это можно решить, если бы был способ "сбросить $ state" без использования метода $state.go()
... что-то, что происходит за кулисами.
Простое изменение кода исправило это для меня
//"Logout" the user
$state.go('login', null, {notify: false}).then(function() {
$window.location.reload();
});
Источник: https://github.com/angular-ui/ui-router/issues/2486#issuecomment-180872463
state.transitionTo()
и его различные варианты. Кроме того,$state.reload()
angular-ui.github.io/ui-router/site/#/api/…