Javascript 在“角度”模式下单击浏览器上的“后退”按钮时获取错误状态?

Javascript 在“角度”模式下单击浏览器上的“后退”按钮时获取错误状态?,javascript,angularjs,angular-ui-router,angularjs-routing,Javascript,Angularjs,Angular Ui Router,Angularjs Routing,我有一个使用不同状态的angular js应用程序,我的第一个页面是登录页面,它包含一个忘记密码链接,点击忘记密码,应用程序将重定向到忘记密码页面,成功登录后出现仪表板,场景如下: 当我在登录页面上单击浏览器后退按钮时,我将被重定向到登录页面 当我在忘记pwd页面并单击后退按钮时,我将被重定向到登录页面,因为这是我的应用程序的第一页 我在这里面临的问题是,当我重新加载忘记密码页面并单击浏览器后退按钮时,我会被重定向到登录页面,然后再次单击后退按钮。应用程序会被重定向到仪表板,甚至没有登录到应用程

我有一个使用不同状态的angular js应用程序,我的第一个页面是登录页面,它包含一个忘记密码链接,点击忘记密码,应用程序将重定向到忘记密码页面,成功登录后出现仪表板,场景如下:

当我在登录页面上单击浏览器后退按钮时,我将被重定向到登录页面

当我在忘记pwd页面并单击后退按钮时,我将被重定向到登录页面,因为这是我的应用程序的第一页

我在这里面临的问题是,当我重新加载忘记密码页面并单击浏览器后退按钮时,我会被重定向到登录页面,然后再次单击后退按钮。应用程序会被重定向到仪表板,甚至没有登录到应用程序,我不会在设置状态时出错。好心帮忙

这是我的router.js在应用程序模块中, 这里的默认路线是指仪表板

  .config(['$stateProvider', '$urlRouterProvider', 'DEFAULT_ROUTE', function($stateProvider, $urlRouterProvider, DEFAULT_ROUTE) {
      $urlRouterProvider.otherwise(DEFAULT_ROUTE);
      // application start point
      $stateProvider
        .state('app', {
          url: '',
          abstract: true,
          templateUrl: 'src/app/templates/base.html',
          controller: 'AppController'
        });

    }])

    .run(['$rootScope', '$location', 'Auth', 'DEFAULT_ROUTE', function($rootScope, $location, Auth, DEFAULT_ROUTE){
      $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {

        if(!Auth.session() && $location.path() != '/forgot'){
          $location.path('/login');
        } else {

          if($location.path() == '/login') {
              //$location.path(DEFAULT_ROUTE);
              $location.path('/login');
            }
          else if($location.path()=='/forgot'){
              $location.path('/forgot');
            }
        }
      });
    }])
以下是我的登录模块路由:

config(['$stateProvider',function($stateProvider){
      $stateProvider
        .state('app.login', {
          url: '/login',
          views: {
            "content": {
              templateUrl: 'src/login/templates/login.html',
              controller: 'loginController'
            }
          }
        })
          .state('app.forgotPassword', {
              url: '/forgot',
              views: {
                  "content": {
                      templateUrl: 'src/login/templates/forgotPassword.html',
                      controller: 'forgotPasswordController'
                  }
              }
          })
    }]);

您是否保存会话信息?以饼干或其他形式?如果是,请执行以下操作

  $rootScope.$on('$locationChangeStart', function (event, next, current) {
        var token = $cookieStore.get('token');           
         if(token==null)          

           $location.path('/');

 }); 

因此,基本上您需要检测状态已从哪个页面更改,然后才能达到重定向标准。您可以使用$locationChangeSuccess来实现它。有关更多信息,请参阅。如果您可以添加plunker复制您的场景,我们将通过添加缺少的部分来帮助您

我有一个Auth服务,它将数据存储到本地存储中,但只有在登录后才能完成。