我得到这个代码无限循环无限循环:角UI路由器时urlRouteProvider.otherwise设置
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
var isLoggedIn = (authService.authentication && authService.authentication.isAuth);
if (isLoggedIn) {
//if user is logged and tries to access login page, prevent it
if (toState.name === 'app.login') {
event.preventDefault();
return fromState;
}
} else {
if (toState.name !== 'app.login') {
event.preventDefault();
$state.go('app.login');
return;
}
}
});
我也有这一套:
function config($stateProvider, $urlRouterProvider, $ocLazyLoadProvider) {
$urlRouterProvider.otherwise('/main');
$stateProvider
.state('app', {
abstract: true,
url: '',
controller: 'mainCtrl',
controllerAs: 'mainCtrl',
template:'<div ui-view></div>'
})
.state('app.login', {
url: '/logn'
controller: 'loginCtrl',
controllerAs: 'loginCtrl',
templateUrl: 'app/security/login.html'
})
.state('app.main', {
url: '/main'
controller: 'mainCtrl',
controllerAs: 'mainCtrl',
templateUrl: 'app/main.html'
})
...
}
现在我当用户进入站点时获得无限的摘要循环并且必须被认证。 它是这样的:
- 用户输入的地址,即:http://localhost
- 默认路由(否则)火灾和reddirects用户http://localhost/#/main
- $ OnStateChangeStart火灾(为app.main)并测试用户是否已登录,如果不是,则阻止默认事件结束重定向到'app.login';
- $ OnstateChangeStart火灾(为app.login)和测试,如果toState.name是app.login'如果是这样,那么没有必要如此重定向恢复。
- 我不知道为什么,但然后$ OnStateChangeStart再次发射,但为app.main。 一遍又一遍地结束它。
请帮忙。
嗨,我不久前遇到过类似的问题,我不得不将其他方法的声明更改为如何在此SO帖子的回复中(让我知道是否有帮助):http:// stackoverflow。 com/questions/26181141/angularjs-ui-router-otherwise-to-state-instead-of-url –
看来这是答案。将再测试一下,然后接受。 – Luka