ui-router: сброс $ состояние без использования $ state.go ()

0

Во-первых, я думаю, что общая проблема здесь заключается в том, что у 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()... что-то, что происходит за кулисами.

Теги:
angular-ui-router
state
reload

1 ответ

1
Лучший ответ

Простое изменение кода исправило это для меня

//"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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню