Angularjs 设置urlRouteProvider.Others时的角度ui路由器无限循环
我得到了这个代码的无限循环:Angularjs 设置urlRouteProvider.Others时的角度ui路由器无限循环,angularjs,angular-ui-router,angularjs-digest,Angularjs,Angular Ui Router,Angularjs Digest,我得到了这个代码的无限循环: $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { var isLoggedIn = (authService.authentication && authService.authentication.isAuth); if (isLoggedIn) {
$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'
})
...
}
函数配置($stateProvider、$urlRouterProvider、$ocLazyLoadProvider){
$urlRouterProvider。否则('/main');
$stateProvider
.state('应用程序'{
摘要:没错,
url:“”,
控制器:“mainCtrl”,
controllerAs:'mainCtrl',
模板:“”
})
.state('app.login'{
url:“/logn”
控制器:“loginCtrl”,
controllerAs:'loginCtrl',
templateUrl:'app/security/login.html'
})
.state('app.main'{
url:“/main”
控制器:“mainCtrl”,
controllerAs:'mainCtrl',
templateUrl:'app/main.html'
})
...
}
现在,当用户进入站点并且必须经过身份验证时,我得到了无限摘要循环。
事情是这样的:
否则()
方法声明更改为状态名称转换,而不是当前使用的URL转换。当我遇到这个问题时,它为我解决了这个问题
举个例子:
$urlRouterProvider.otherwise(function($injector, $location){
$injector.invoke(['$state', function($state) {
$state.go('app.main');
}]);
});
获取$state
并执行$state.go
的另一种方法是
var $state = $injector.get('$state');
$state.go('app.main');
我不是很有经验的角度,所以我不知道为什么这解决了它,所以如果有人可以详细说明,请做
更新
这篇文章中被接受的答案似乎很好地解释了为什么会发生这种情况。嘿,不久前我遇到了类似的问题,我不得不将我对其他方法的声明更改为这篇文章的答案(如果有帮助,请告诉我):这似乎就是答案。将进行更多测试,然后接受。很抱歉,这没有帮助,可能是其他地方的一些代码导致了此错误。如果您还没有找到解决方案,我建议您创建一个包含相关代码的新问题,以便人们可以帮助您调试/修复它。谢谢!