История браузера: пропустить абстрактное состояние

Навигация с помощью кнопки «Назад» в браузере работает, как и ожидалось, но при встрече с абстрактным состоянием она переходит в исходное состояние (которое обязательно является дочерним элементом абстрактного состояния, к которому осуществляется переход).

Есть ли способ в angular-ui-router запретить добавление абстрактных состояний в историю?


person steve_baer    schedule 08.06.2016    source источник
comment
Не совсем понятно, в чем дело. Обеспечьте простую схему маршрутизации и укажите, что в отношении наблюдаемого или ожидаемого поведения   -  person charlietfl    schedule 09.06.2016
comment
Состояние «а» является обычным состоянием. Состояние «a.b» является абстрактным состоянием. Состояние 'a.b.c' является обычным состоянием. В состоянии a.b.c обратная навигация переходит в состояние a.b, которое, будучи абстрактным, отклоняет переход и возвращает пользователя в состояние a.b.c. Желаемая функциональность заключалась бы в том, чтобы иметь возможность навигации с помощью кнопки «Назад» от a.b.c до a.   -  person steve_baer    schedule 09.06.2016
comment
Можете ли вы предоставить код маршрутизатора пользовательского интерфейса для штатов, в которых это происходит?   -  person Larry Turtis    schedule 09.06.2016


Ответы (1)


Есть такая же проблема. Надеюсь, это поможет вам Как заставить кнопку «Назад» работать с конечным автоматом пользовательского интерфейса AngularJS?

Это немного сложно для меня, и кажется, что должно быть более простое решение

Редактировать: я сделал это. Прежде всего вам нужно ваше старое состояние (также у нас есть оболочка для локального хранилища, поэтому вам следует изменить методы).

angular
    .module('app')
    .run(appRunFunction);

appRunFunction.$inject = ['$rootScope', 'localstorage'];

function appRunFunction($rootScope, localstorage) {
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParam, fromState, fromParam) {
      localstorage.setValue('lastState', fromState.name);
    });
};

Мы также написали сервис, который перенаправляет из абстрактного состояния в обычное состояние после сравнения вашего следующего обычного состояния с вашим последним.

angular
.module('app.services')
.factory('states', states);

states.$inject = ['$state', 'localstorage'];

function states($state, localstorage) {
  var service = {reloadWithParam: reloadWithParam};
  return service;

  function reloadWithParam(param, value) {
    var fromState = localstorage.getValue('lastState') + '.' + localstorage.getValue('lastPage');
    var toState = $state.current.name + '.' + value;
    var paramObject = {};
    paramObject[param] = value;

    if (fromState === toState) {
      window.history.go(-1);
    } else {
      $state.go($state.current, paramObject, { notify: false});
      localstorage.setValue('lastPage', value);
    }
  }
}
person Aleksey Solovev    schedule 14.06.2016