【发布时间】:2015-06-11 04:40:13
【问题描述】:
如果用户尚未通过身份验证,则应重定向到登录页面。 $state.go("login"); 应该完成这个,但它什么也没做。
// in app.js
$stateProvider
.state('login', {
template: 'login.html'
url: '/login',
controller: 'AuthenticationCtrl',
})
.state('special', {
resolve: { loginRequired: checkAuthenticated },
template: 'special.html',
url: '/special',
controller: 'SpecialCtrl',
})
var checkAuthenticated = function($state, AuthenticationService, $q, $timeout) {
var deferred = $q.defer();
if(AuthenticationService.isAuthenticated()) {
deferred.resolve();
} else {
deferred.reject();
alert('You are being redirected to login page');
$state.go("login"); // redirect to login page -- but this does nothing.
}
}
在这里,如果用户尚未通过身份验证并尝试访问需要身份验证的路由,我会看到我的警报弹出。但之后什么也没有发生; ui-router 不会重定向到我的登录页面。
我也试过$location.path('/login')而不是$state.go("login"),但这也没有任何作用。
我检查了documentation 它说的是go():
String Absolute State Name or Relative State Path
我有,所以我一定错过了导致这个问题的东西,但我不确定是什么。
【问题讨论】:
-
我遇到了 state go 与警报结合的问题,我通过使用设置为 100 毫秒左右的超时解决了这个问题,例如:延迟你的 state.go,也许这会解决你的问题。
-
@ErikSvedin 谢谢,使用
$timeout有效。如果您回答,我会将其标记为正确。
标签: javascript angularjs angular-ui-router angularjs-service angularjs-routing