我得到這個代碼無限循環無限循環:角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