有沒有更容易的方式重定向到login
狀態,而不使用resolve: {}
在每個國家?我的應用程序正在不斷增加,並且向各個州添加像loginRequired
或skipIfLoggedIn
這樣的解決方案正在混淆我的配置塊。如果有幫助,我使用Satellizer進行身份驗證。輕鬆地重定向到Angular登錄?
例模塊航線配置:
(function() {
'use strict';
angular
.module('uberCoolModule')
.config(configRoutes);
configRoutes.$inject = ['$stateProvider'];
function configRoutes ($stateProvider) {
$stateProvider
.state('login', {
url : '/login',
templateUrl : 'entrance/login/login.html',
data : { pageTitle: 'Login' },
resolve: {
skipIfLoggedIn: skipIfLoggedIn
}
})
.state('logout', {
url : '/logout',
controller : 'Logout'
resolve: {
loginRequired: loginRequired
}
})
.state('members', {
url : '/members',
controller : 'Home'
resolve: {
loginRequired: loginRequired
}
});
function skipIfLoggedIn($q, $auth) {
var deferred = $q.defer();
if ($auth.isAuthenticated()) {
deferred.reject();
} else {
deferred.resolve();
}
return deferred.promise;
}
function loginRequired($q, $location, $auth) {
var deferred = $q.defer();
if ($auth.isAuthenticated()) {
deferred.resolve();
} else {
$location.path('/login');
}
return deferred.promise;
}
}
})();
可以綁定'$ rootScope一個孩子的狀態不能被訪問'到[$ stateChangeStart](http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state)事件,然後檢查那裏的所有內容 –