Когда клиент открывает веб-приложение, как восстановить его последнее состояние с помощью router-ui?

Я использую router-ui для своей угловой одиночной страницы

Я слышу событие $stateChangeSuccess для сохранения в localStorage текущего состояния и его параметров:

$scope.$on('$stateChangeSuccess', function(event, toState) {
    localStorage.lastState = toState.name;
    localStorage.lastStateParams = JSON.stringify($stateParams);
});

Мой вопрос: когда клиент открывает веб-приложение, я хочу восстановить свое личное последнее состояние, но где я могу поместить этот код?

$state.go(localStorage.lastState, JSON.parse(localStorage.lastStateParams));

// ОБНОВЛЕНИЕ На самом деле я поместил этот код в событие $stateChangeSuccess следующим образом:

$scope.$on('$stateChangeSuccess', function(event, toState) {
    if (toState.name !== 'welcome') {
        localStorage.lastState = toState.name;
        localStorage.lastStateParams = JSON.stringify($stateParams);
    }

    if (toState.name !== localStorage.lastState) {
        $state.go(localStorage.lastState, JSON.parse(localStorage.lastStateParams));
    }
});

Проблема с этим решением заключается в том, что процесс открытия приложения выглядит следующим образом:

  • localhost (пользователь открывает приложение)
  • localhost/#/welcome (потому что процедура $urlRouterProvider.otherwise('/welcome') выполняется до события $stateChangeSuccess)
  • а затем: localhost/#/articles/423 (в событии $stateChangeSuccess)

Так что я уверен, что делаю плохо, кто-то знает хороший метод?

Спасибо большое,


person bArraxas    schedule 28.01.2016    source источник


Ответы (1)


Как всегда, решение всегда проще, чем вы думаете!

В моем основном контроллере:

$scope.$on('$stateChangeSuccess', function(event, toState) {
    // Timeout is required because the document.location.hash is not upadated immediatly
    $timeout(function() { 
        localStorage.hash = document.location.hash.substr(1);
    }, 100);
});

В конце моих маршрутов:

// Default
$urlRouterProvider.otherwise(localStorage.hash || '/welcome');
person bArraxas    schedule 28.01.2016