繁体   English   中英

单击浏览器中的“后退”按钮时出现错误状态?

[英]Getting incorrect states while click of back button on browser in angular?

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

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

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

我在这里面临的问题是当我重新加载忘记的密码页面并单击浏览器上的后退按钮时,我被重定向到登录页面,然后再次单击后退按钮,该应用程序被重定向到了仪表板,甚至没有登录到应用程序,但我无法到达我把我的状态弄错了。 友善的帮助

这是我在应用模块中的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'
                  }
              }
          })
    }]);

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

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

           $location.path('/');

 }); 

因此,基本上,您需要检测状态从哪个页面更改,然后才能实现重定向条件。 您可以使用$ locationChangeSuccess来实现它。有关更多信息,请参阅此内容 。如果您可以添加plunker复制场景,那么我们可以通过在其中添加缺少的部分来为您提供更多帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM