我没有root /
州。我的根状态是
$urlRouterProvider.otherwise('/dashboard');
并在$stateChangeStart
中如果用户未登录,则重定向到登录
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
var requireLogin = toState.data && toState.data.access!=undefined;
if (requireLogin && !Auth.isLoggedIn() {
$rootScope.redirectState = toState.name;//Auto redirect to the state
event.preventDefault();
$state.go('login');
return;
}
});
如果我直接点击/dashboard
,这可以正常工作但是如果我点击/
它会被重定向到/dashboard
,它会在内部被重定向到/login
,直到这很好,但之后它被反复重定向到/dashboard
和/login
。
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.15/$rootScope/infdig?p0=10&p1=%5B%5D
at REGEX_STRING_REGEXP (angular.js:63)
at Scope.$get.Scope.$digest (angular.js:14346)
at Scope.$get.Scope.$apply (angular.js:14571)
at bootstrapApply (angular.js:1455)
at Object.invoke (angular.js:4203)
at doBootstrap (angular.js:1453)
at bootstrap (angular.js:1473)
at angularInit (angular.js:1367)
at HTMLDocument.<anonymous> (angular.js:26304)
at jQuery.Callbacks.fire (jquery.js:3099)
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
这里的解决方案是使用其中之一。基于这个Q&amp; S,我为两者创造了掠夺者。答:How can I fix 'Maximum call stack size exceeded' AngularJS
予。州 'dashboard'
是公开的。在this working plunker
.state('dashboard', {
url: "/dashboard",
templateUrl: 'tpl.html',
data: {
//access: true
},
})
II。或重定向到 'login'
- other solution plunker
//$urlRouterProvider.otherwise('/dashboard');
$urlRouterProvider.otherwise('/login');
关键是,否则应该没有任何限制。它应该是一些公共页面...如果有任何...或直接登录。这就是重点
答案 1 :(得分:1)
如果我们需要
我们可以更新此事件处理程序:
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState) {
var isGoingToLogin = toState.name === "login";
if (isGoingToLogin && Auth.isLoggedIn)
{
event.preventDefault();
$state.go('dashboard');
return;
}
if (isGoingToLogin || Auth.isLoggedIn)
{
return;
}
var requireLogin = toState.data && toState.data.access !== undefined;
if (requireLogin) {
$rootScope.redirectState = toState.name; //Auto redirect to the state
event.preventDefault();
$state.go('login');
return;
}
});
再次使用两种方法:
予。州“仪表板”是公开的。在this working plunker
中查看.state('dashboard', {
url: "/dashboard",
templateUrl: 'tpl.html',
data: {
//access: true
},
})
II。或者重定向到“登录” - other solution plunker
//$urlRouterProvider.otherwise('/dashboard');
$urlRouterProvider.otherwise('/login');