我想简洁地实现的方式将用户重定向到一个登录途径,如果他们没有登录。我立足我解掉的另一SO回答here那并不开箱即用。这是我的解决方案。重定向路由,如果用户没有通过验证
angular.module('myApp', ['ngResource', 'ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
var requireAuthentication = function() {
return {
load: function ($q) {
console.log('Can user access route?');
if (g_isloggedIn === true) { // fire $routeChangeSuccess
var deferred = $q.defer();
deferred.resolve();
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
return $q.reject("'/login'");
}
}
};
};
$routeProvider
.when('/some_page_that_requires_authentication', {
templateUrl: '/views/secret.html',
controller: 'secretCtrl',
resolve: requireAuthentication()
})
.when('/anybody_can_see_me', {
templateUrl: '/views/public.html',
controller: 'publicCtrl',
});
}]);
我的问题是,我在哪里可以听上$routeChangeError
事件,这样我也可以把路线?我试着在指令中做到这一点,但无法让事件触发。我不能将它放入控制器,因为如果承诺被拒绝,它将不会加载。有什么想法吗?
你应该能够观察到它在任何控制器(或指令)它位于'NG-view'元素之外。 – Stewie
甚至可以把它放在'run()'......你的代码中的一个小错误......需要调用'$ q.defer();'在你的'if'之前 – charlietfl