我正在尝试干净地实现一种方法,如果他们没有登录,将用户重定向到登录路由.我的解决方案是基于另一个SO答案,这里没有开箱即用.这是我的解决方案.
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
事件,以便我可以重定向路线?我尝试在指令中执行它,但永远不会触发事件.我无法将其放入控制器,因为如果承诺被拒绝,它将无法加载.有什么想法吗?