如果用户没有登录我想阻止状态变化。我使用下面的代码并且工作正常。
angular.module('app', [...])
.config(function(){})
.run(function($rootscope,$auth,$state){
$rootScope.$on("$stateChangeStart", function(event){
var user = $auth.getToken();
if (user === null){
// User isn’t authenticated
$state.transitionTo("index");
event.preventDefault();
}
});
})
但显示此错误!
angular.js:12783 RangeError: Maximum call stack size exceeded
at Array.indexOf (native)
at indexOf (http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:87:18)
at http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:1708:46
at forEach (http://localhost:9000/bower_components/angular/angular.js:341:20)
at http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:1707:9
at forEach (http://localhost:9000/bower_components/angular/angular.js:341:20)
at Object.$$keys (http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:1706:7)
at Object.$$validate [as $$validates] (http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:1729:23)
at Object.transitionTo (http://localhost:9000/bower_components/angular-ui-router/release/angular-ui-router.js:3184:27)
at http://localhost:9000/scripts/app.js:114:24
任何人都可以帮助我?
答案 0 :(得分:1)
您的stateChangeStart函数会创建一个循环,这就是您收到错误的原因。考虑一下:
您可以尝试使用某个变量作为仅针对经过身份验证的用户的状态,例如:
$rootScope.$on("$stateChangeStart", function(event, toState){
if (toState.auth) {
var user = $auth.getToken();
if (!user) {
// User isn’t authenticated
event.preventDefault();
$state.transitionTo("index");
}
}
});
答案 1 :(得分:0)
angular.module('app', [...])
.config(function(){})
.run(function($rootscope,$auth,$state){
$rootScope.$on("$stateChangeStart", function(event){
var user = $auth.getToken();
if (user === undefined){
// User isn’t authenticated
$state.transitionTo("index");
event.preventDefault();
}
});
})