locationChangeStart et la prévention de la route à modifier

Je suis en train de créer une validation de base que l'utilisateur peut accéder à une route ou pas.
J'ai eu des progrès, mais il y a une chose que je ne peux pas comprendre.

Je suis en utilisant $locationChangeStart pour surveiller les changements de route. Le scénario est:
1. si l'utilisateur est connecté, puis de lui permettre d'accéder à toutes les routes, à l'exception auth routes (login, register). Je vérifie cela en appelant la méthode isAuthenticated() de mon AuthFactory
2. Si l'utilisateur n'est pas connecté, alors il a accès uniquement se connecter et enregistrer des itinéraires. Toute autre voie ne doit être empêché, et l'utilisateur doit être redirigé vers la de login dans ce cas.

$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){
  if(AuthFactory.isAuthenticated()){
    if(AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/');
    }
  } else {
    if(!AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/login');
    }

  }
});

Chose qui me dérange, c'est celui avec preventDefault(). Si l'application atteint de code avec preventDefault(), location.path() qui vient après qui, tout simplement ne fonctionne pas.

Cependant, si je supprime event.preventDefault(), location.path() œuvres. Problème avec cela, c'est que j'ai besoin et d'éviter, en cas de non-connecté tente d'accéder à certains non-auth page.

Fondamentalement, je veux être capable de prévenir ou de redirection basée sur l'itinéraire requis. Quelle est la bonne façon de le faire?

Je suis incertain de ce que vous faites et ce que vous désirez. Pouvez-vous nous fournir un plunkr?
Hey baba, j'ai édité ma question, veuillez vérifier si il est plus concis maintenant?
À mon avis, vous shoudn pas utiliser le $service de localisation. Il est trop bas niveau. Je voudrais vérifier le github.com/angular-ui/ui-router qui est beaucoup plus adapté à la tâche que vous décrivez.
Je vois, seulement j'ai pensé que je peux gérer cela en utilisant juste angulaire des événements. Je vais jeter un oeil, merci
Avez-vous essayez d'utiliser $timeout pour déclencher $lieu.path() après preventDefault(). De cette façon, vous séparer de l'annulation de la trajectoire de changement de l'événement et de la configuration du nouveau chemin d'accès. Devrait fonctionner.

OriginalL'auteur Ned | 2013-12-25