我正在使用AngularJS和Ui-Router尝试设置两个不同的首页,一个是给已登录用户的,另一个是给未登录用户的。但是我遇到了以下错误:
RangeError: Maximum call stack size exceeded
我运行了console.trace()
,发现有一个问题导致状态无限循环(或类似的情况)。但我不知道如何修复它。
这是生成错误的代码。
.run(function ($rootScope, $state, $location, Auth) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {
if(fromState.name === "") {
if (Auth.isLoggedIn()) {
$state.go('main');
event.preventDefault();
} else {
$state.go('welcome');
event.preventDefault();
}
} else {
if (toState.authenticate && !Auth.isLoggedIn()) {
$location.path('/login');
event.preventDefault();
}
}
});
据我所知,它似乎源于if(fromState.name === "")
$state.go
中不要更改$rootScope
变量,这可能是原因,尽管通常会导致无限的 $digest 错误。这是一个奇怪的错误,最好尝试在 plunkr 中复制它,通常我发现尝试在我的环境之外复制它的过程有助于解决问题。此外,工作示例对于奇怪的问题更清晰! - Simeon Cheeseman