我有一个角度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'
}
}
})
}]);
答案 0 :(得分:0)
你保留会话信息吗?用饼干或其他形式?如果是,请执行以下操作
$rootScope.$on('$locationChangeStart', function (event, next, current) {
var token = $cookieStore.get('token');
if(token==null)
$location.path('/');
});
答案 1 :(得分:0)
所以基本上你需要检测状态发生变化的页面,以及你能否达到重定向标准。您可以使用 $ locationChangeSuccess 来实现它。请参阅DEMO以获取更多信息。如果您可以添加复制场景的plunker,那么我们可以通过在其中添加缺失部分来帮助您。