Изменение состояния без изменения истории браузера в angular ui-router

Предположим, что у нас есть такая логика:

  • Из состояния A перейдите в состояние B.
  • Когда мы приходим в состояние B, приложение всегда перенаправляет нас в состояние C, вызывая $state.go(stateC)
  • Теперь мы находимся в состоянии C

Мой вопрос заключается в том, как вернуться в состояние A из состояния C (учитывая, что состояние A может быть любым состоянием, которое мы не знаем во время выполнения, то есть пользователь может получить доступ к состоянию B из любых других состояний)

Ответ 1

Используйте параметр location со значением "replace"...

$state.go(stateC, null, {
    location: 'replace'
})

См. https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_go

location - {boolean = true | string =} - Если true обновит URL-адрес в строке местоположения, если false не будет. Если строка должна быть "replace", которая обновит URL-адрес, а также заменит последнюю историю записи.

Ответ 2

Вы можете отслеживать посещаемые состояния в службе, а затем просто вызвать $state.go в предыдущем состоянии.

Вы можете наблюдать изменения состояния так:

$rootScope.$on('$stateChangeStart', 
function(event, toState, toParams, fromState, fromParams){ 
    // add fromState to history 
});

Как $смотреть изменение состояния $stateProvider в AngularJS?