Redirection vers la route si l'utilisateur n'est pas authentifié

Je suis en train de propreté, de mettre en place un moyen de rediriger l'utilisateur vers un login route si elles n'êtes pas connecté. Je suis en fondant ma solution sur un autre AFIN de répondre à ici qui ne fonctionne pas hors de la boîte. Voici ma solution.

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',
        });
}]);

Ma question est, où puis-je écouter sur le $routeChangeError événement afin que je puisse rediriger la route? J'ai essayé de le faire dans une directive, mais ne pourrait jamais obtenir cas d'incendie. Je ne peux pas le mettre dans un contrôleur, car il ne se charge pas si la promesse est rejetée. Toutes les pensées?

Vous devriez être en mesure de l'observer à n'importe quel contrôleur (ou directive) qui se trouve à l'extérieur de ng-view élément.
pouvez même le mettre dans run()...léger bug dans votre code...besoin d'appeler $q.defer(); avant votre if

OriginalL'auteur w.brian | 2013-12-11