在角度上点击浏览器上的后退按钮时获取错误的状态?

时间:2015-09-04 09:41:57

标签: javascript angularjs angular-ui-router angularjs-routing

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

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

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

我面临的问题是,当我重新加载忘记密码页面并点击浏览器后退按钮时,我被重定向到登录页面并再次点击后退按钮,应用程序被重定向到仪表板,甚至没有登录到应用程序,我是在我的州里,我没有遇到错误。请帮助

这是我的app.ms里面的app.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'
                  }
              }
          })
    }]);

2 个答案:

答案 0 :(得分:0)

你保留会话信息吗?用饼干或其他形式?如果是,请执行以下操作

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

           $location.path('/');

 }); 

答案 1 :(得分:0)

所以基本上你需要检测状态发生变化的页面,以及你能否达到重定向标准。您可以使用 $ locationChangeSuccess 来实现它。请参阅DEMO以获取更多信息。如果您可以添加复制场景的plunker,那么我们可以通过在其中添加缺失部分来帮助您。