【发布时间】:2014-11-25 22:34:16
【问题描述】:
我在我的 Angular 应用程序中使用 ui.router 进行路由。有一个典型的登录场景,如果用户没有登录,我会将他重定向到登录 url。没有 ui.router 库,使用 $routeChangeStart 事件结合$location.path 可以正常工作。现在,我正在使用$stateChangeStart 事件,结合$state.go,没有任何效果!它还将我的浏览器发送到无限循环。我从其他来源得知这是一个已知错误,建议的解决方案都不适合我。此外,$location.path 也不会重定向到登录页面。
这就是我配置路径的方式:
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('main', {
url: '/',
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.state('about', {
url: '/about',
templateUrl: 'views/about.html',
controller: 'AboutCtrl'
})
.state('login', {
url: '/login',
templateUrl: 'views/loginform.html',
controller: 'LoginCtrl'
});
$urlRouterProvider.otherwise("/");
}])
还有我的run 方法:
.run(['$state', '$rootScope', '$location', function($state, $rootScope, $location) {
//Check when routing starts
//event, next, current
$rootScope.$on( '$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
//Redirect to login if the user is not logged in
if (!isUserLoggedIn) {
//Some suggestion
//e.preventDefault();
console.log('Not logged in');
//Infinite loop, kills my browser!
$state.go('login');
$state.transitionTo('login');
//Some suggestion
$state.go('login', { url: '/login'});
//Doesn't work
$location.path('/login');
//$location.path( $state.href('login');
console.log('Redirected');
}
});
【问题讨论】:
-
isUserLoggedIn定义在哪里? -
我有一个身份验证服务,由于一些官方原因,我从这段代码中跳过了它。它适用于默认路由。
标签: javascript angularjs angular-ui-router url-routing