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

Во-первых, я думаю, что общая проблема здесь в том, что 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'), и мы не получали странного впечатления от изменения представления перед выходом из системы. Однако, когда мы начали использовать обработчики состояния $, такие как $rootScope.$on('$stateChangeStart', function (event, toState, toParams), мы заметили, что toState не сбрасывается после перезагрузки окна. Таким образом, $stateChangeStart сработает после перезагрузки, а toState будет по-прежнему настроен на то представление, в котором пользователь находился до вызова /logout. Это не настоящий сброс приложения!

Возможное решение: я думаю, что все это можно решить, если бы существовал способ «сбросить $ state» без использования метода $state.go() ... вместо этого что-то происходит за кулисами.


person jlewkovich    schedule 25.01.2016    source источник
comment
Ознакомьтесь с state.transitionTo() и его различными вариантами. Кроме того, $state.reload() angular-ui. github.io/ui-router/site/#/api/   -  person wrshawn    schedule 26.01.2016
comment
Вы пробовали window.history.go(-window.history.length-1)?   -  person NoodleOfDeath    schedule 29.01.2020


Ответы (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

person jlewkovich    schedule 23.02.2016