我在我的Angular應用中使用ui.router
進行路由。有一個典型的登錄場景,如果他沒有登錄,我將用戶重定向到登錄網址。沒有ui.router庫,使用$ routeChangeStart事件並結合$location.path
可以正常工作。現在,我正在使用$stateChangeStart
事件,加上$state.go
,沒有什麼效果!它也將我的瀏覽器發送到無限循環。我從其他來源讀到這是一個已知的錯誤,並且沒有任何建議的解決方案適用於我。而且,$location.path
也不會重定向到登錄頁面。Angular ui路由器 - 重定向根本不起作用
這是我是如何配置我的路徑:
.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'定義在哪裏? – Phil 2014-10-01 06:36:35
我有一個身份驗證服務,由於某些官方原因,我從此代碼中跳過了它。它與默認路由很好地協作。 – 2014-10-01 06:38:17