Angularjs ui路由器和浏览器历史记录问题

Angularjs ui路由器和浏览器历史记录问题,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我在我的应用程序中使用angular UI路由器,该应用程序启用了html5路由(angular的html5模式) 我主要使用ui sref从一个状态导航到另一个状态,它工作得很好。但是,有时当我使用浏览器后退按钮时,什么也不会发生。请注意,这是一个非常重要的事件。但是,当它确实起作用时,当我尝试使用浏览器控件“前进”时,什么也没有发生,我保持不变。我所在的所有州都有唯一的URL。我被这个问题困住了,无法继续。任何指示都会有帮助 这是我设置应用程序基本路径的方式: <base href="

我在我的应用程序中使用angular UI路由器,该应用程序启用了html5路由(angular的html5模式)

我主要使用ui sref从一个状态导航到另一个状态,它工作得很好。但是,有时当我使用浏览器后退按钮时,什么也不会发生。请注意,这是一个非常重要的事件。但是,当它确实起作用时,当我尝试使用浏览器控件“前进”时,什么也没有发生,我保持不变。我所在的所有州都有唯一的URL。我被这个问题困住了,无法继续。任何指示都会有帮助

这是我设置应用程序基本路径的方式:

<base href="/" target="_blank"> 

在这一点上,我不知道还有什么代码可以提供,请告诉我是否还需要其他代码。我认为在浏览器历史记录中存储状态更改的方式可能存在一些问题。如果可能发生这种情况,请告诉我如何才能确定代码的哪一部分导致了这种情况。

由于您没有提供任何代码,我无法确定您是否已经尝试过此操作,但也许答案可以帮助您

因为您没有提供任何代码,如果您已经尝试过此操作,我无法确定,但也许答案可以帮助您提供一些代码。可能是你的ui路由器setup@Austin增加了一些。如果还需要什么,请告诉我。这是Angular面临的已知挑战,解决方案非常难看。我还没有找到一个好的解决方法,尽管我正在传递状态参数,这使得问题更加难以解决。为了其他人的利益,更新它。我从来没有找到任何解决这个问题的方法,所以我回到了非HTML5模式路由,它神奇地修复了历史问题。需要提供一些代码。可能是你的ui路由器setup@Austin增加了一些。如果还需要什么,请告诉我。这是Angular面临的已知挑战,解决方案非常难看。我还没有找到一个好的解决方法,尽管我正在传递状态参数,这使得问题更加难以解决。为了其他人的利益,更新它。我从未找到任何解决此问题的方法,因此我返回到非HTML5模式路由,它神奇地修复了历史问题。@ShinyDarkSone我添加了一些代码,如果您还需要,请告诉我。另外,我确实看过了你链接的答案,但我不明白为什么我需要它。只要我的浏览器中的URL是正确的,路由器就应该加载正确的状态。是吗?是的,应该是这样,但如果您在(“$stateChangeStart”)上的
$rootScope.$中放置断点,我们需要查看发生了什么
查看toState内部,它应该有上一个状态的值,如果没有,它应该有相同的值检查fromState,可能有一些我们没有看到的路由问题。如果你已经尝试过了,你能给我评论一下结果吗?@ShinyDarkSone我已经添加了一些代码,如果你还需要,请告诉我。另外,我也通过了t他回答说你已经链接了,但我不明白为什么我需要它。只要我的浏览器中的URL正确,路由器应该加载正确的状态。对吗?是的,应该加载,但如果你在(“$stateChangeStart.”上的
$rootScope.$on”中放置断点,我们需要查看发生了什么
然后查看toState内部,它应该具有来自上一个状态的值,如果没有,并且它具有相同的值检查fromState,可能存在一些我们没有看到的路由问题。如果您已经尝试过,您可以对结果进行评论吗?
$stateProvider
.state("base",{
    abstract: true,
    url: "/app",
    template: "<div ui-view></div>"
})
.state("login", {
    url: "/login",
    parent: "base",
    templateUrl: "somePath",
    controller: "loginController"
})
.state("auth",{
    abstract: true,
    parent: "base"
    resolve: {
        user: function(StateService){
            return StateService.getCurrentUser();
        }
    }
})
.state("state1", {
    url: "/state1",
    parent: "auth",
    templateUrl: "somePath",
    controller: "state1Controller"
})
.state("state2", {
    url: "/state2",
    parent: "auth",
    templateUrl: "somePath",
    controller: "state2Controller"
});
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState) {
  if(toState && toState.url =="/login"){
    StateService.getCurrentUser()
    .then(function(user){
      $state.go("state1")
    })
    .catch(function(){
      // no problem, go ahead
    }); 
  }
});