Confusion $locationChangeSuccess et $stateChangeStart
Je suis en train de faire certains d'authentification avec AngularUI Routeur. $urlRouter.sync()
ressemble exactement à ce dont j'ai besoin. Toutefois, c'est seulement disponible quand j'en ai intercepter $locationChangeSuccess
. Mais quand je fais ça, $state.current.name
est vide, alors que je veux qu'il soit à l'état actuel.
Voici mon code pour l'instant:
$rootScope.$on('$locationChangeSuccess', function(event, next, nextParams) {
event.preventDefault();
if ($state.current.name === 'login') {
return userService.isAuthenticated().then(function(response) {
var authenticated;
authenticated = response.authenticated;
return alert(authenticated);
});
}
});
Aucune idée de ce que je fais mal?
Euh... Qu'en
Alors je ne peux pas utiliser
Pouvez-vous partager ce qui est de l'exigence??
de nombreux exemples autour de démontrer que." où?
$stateChangeSuccess
?Alors je ne peux pas utiliser
urlRouter.sync()
$state.current.name
ne seront vides sur le chargement initial de la page. Les modifications d'état déclenché par la suite auront un nom d'état. Si tout ce que vous devez faire est d'appliquer l'authentification, puis de les écouter sur $stateChangeStart
- vous n'avez pas besoin de vous soucier de $urlRouter.sync()
. Il y a beaucoup d'exemples autour de démontrer que.Pouvez-vous partager ce qui est de l'exigence??
de nombreux exemples autour de démontrer que." où?
OriginalL'auteur Shamoon | 2014-09-16
Vous devez vous connecter pour publier un commentaire.
Je suggère d'aller plus "
UI-Router
". Nous devrions utiliser$rootScope.$on('$stateChangeStart'
cas où$state.current
serait fourni. Voici un exemple de travailObservons simple (mais pas naïf) solution, qui pourrait être étendu à n'importe quel degré plus tard. Aussi, si vous aimez cette approche, ici, est beaucoup plus complète de la mise en œuvre: angulaire de l'interface utilisateur de connexion au routeur d'authentification
Tout d'abord, jetons notre service d'utilisateur défini comme ceci:
Nous utilisons async (ici
$timeout
) pour chargeruser
objet forme un serveur. Dans notre exemple, il aura une propriété{isAuthenticated: false }
, qui sera utilisée pour vérifier si elle est authentifiée.Il y a aussi la méthode de synchronisation
isAuthenticated()
qui, jusqu'à ce que l'utilisateur est chargé et admis - retourne toujoursfalse
.Et que serait notre auditeur de la
'$stateChangeStart'
événement:Ce que nous sommes en vérifiant d'abord, si l'utilisateur est déjà chargé et authentifié (
var isAuthenticated = ...
). Ensuite, nous allons donner vert pour une méthode publique. Cela se fait avec ladata {}
propriété de l'état définition de l'objet (voir Associer des Données de l'État des Objets)Et c'est tout. Dans le cas des états défini comme dans un extrait de code ci-dessous nous pouvons faire l'expérience:
'public'
,'home'
sont autorisés à personne'private'
,'private'
redirige la connexion siisAuthenticated === false
la
'login'
dans cet exemple fournit un moyen rapide comment passer isAuthenticated on/offVérifier que tous les ici
Certains autres ressources:
et d'authentification
Si je comprends votre question correctement, la bonne nouvelle, c'est résolu 😉 Angulaire
provider
modèle (y comprisservices
etfactories
) est entraînée par la singleton schéma. Si leuserService
dans notre exemple serait instancié seulement une fois, seulement une fois, vous appelez le serveur (ici le$timeout
) et tout à côté de l'appel à elle sera de retouruser
variable locale... est-il utile?ops.. oui, désolé, j'ai eu confondre avec getAuthObj et isAuth.. merci
OriginalL'auteur Radim Köhler