【问题标题】:Browser History: skip abstract state浏览器历史:跳过抽象状态
【发布时间】:2016-06-08 23:26:19
【问题描述】:

浏览器后退按钮导航按预期工作,但在遇到抽象状态时,它会解析为原始状态(这必然是被导航到的抽象状态的子状态)。

angular-ui-router 中是否有办法抑制抽象状态被添加到历史记录中?

【问题讨论】:

  • 不太清楚是什么问题。提供与所见或预期行为有关的简单布线布局和参考
  • 状态 'a' 是一个常规状态。状态“a.b”是一个抽象状态。状态“a.b.c”是一个常规状态。当处于状态 a.b.c 时,返回导航进入状态 a.b,它是抽象的,拒绝转换并将用户返回到状态 a.b.c。所需的功能是能够让后退按钮导航从 a.b.c 到 a.
  • 您能否提供发生这种情况的状态的 ui 路由器代码?

标签: angularjs angular-ui-router html5-history


【解决方案1】:

有同样的问题。希望对你有帮助How do I get the Back Button to work with an AngularJS ui-router state machine?

这对我来说有点难,似乎必须有一个更简单的解决方案

编辑: 我做到了。 首先你需要你的旧状态(我们也有本地存储的包装器,所以你应该改变方法)。

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);
    }
  }
}

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2011-09-10
    • 2016-01-05
    • 2018-11-30
    • 2012-11-14
    相关资源
    最近更新 更多