我正在尝试为我的应用程序编写一个身份验证模块,遵循在线教程中的示例。
使用console.log
,它可以正常工作。如果我使用$state.go()
,我将获得无限循环,这会导致超出最大调用堆栈大小。
我的错误在哪里?
var myApp = angular.module('myApp', []);
myApp.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState) {
var learner = toState.data.isLoggedIn && toState.data.role == 'learner';
var trainer = toState.data.isLoggedIn && toState.data.role == 'trainer';
var guest = !toState.data.isLoggedIn && toState.data.role == 'guest';
if (learner) {
console.log('learner');
}
else if (trainer) {
console.log('trainer');
}
else {
$state.go('home');
event.preventDefault();
}
});
}]);
答案 0 :(得分:0)
这可能与ui-router中的已知问题有关,因为角度为1.3.4左右。请参阅此处获取解决方法:https://github.com/angular-ui/ui-router/issues/600
我也有这个问题,并且可以通过使用.otherwise的另一个版本来修复它,它需要一个函数:
替换:
$urlRouterProvider.otherwise("/home");
with:
$urlRouterProvider.otherwise( function($injector, $location) {
var $state = $injector.get("$state");
$state.go("home");
});
答案 1 :(得分:0)
如果toState ===' home'
,请尝试使用if子句排除操作var myApp = angular.module('myApp', []);
myApp.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState) {
if(toState.name === 'home'){
return;
}
var learner = toState.data.isLoggedIn && toState.data.role == 'learner';
var trainer = toState.data.isLoggedIn && toState.data.role == 'trainer';
var guest = !toState.data.isLoggedIn && toState.data.role == 'guest';
if (learner) {
console.log('learner');
}
else if (trainer) {
console.log('trainer');
}
else {
$state.go('home');
event.preventDefault();
}
});
}]);