2017-06-16 3 views
3

Est-ce routeur angulaire (v 4.1.1) canActivate prendre plus d'une fonctionRouter canActivate avec plus de 1 garde

{ 
    path: '', 
    component: SomeComponent, 
    canActivate: [guard1, guard2, ...] 
} 

doit quelque chose comme ce travail? Sinon ils pourquoi serait-il dans une liste si son suppose de prendre juste un garde

Parce que j'ai quelque chose de similaire, et même si les rendements guard1false, guard2 seront encore exécutés.

Merci à l'avance

angulaire 4.1.1

+0

ils sont exécutés l'un après l'autre –

+0

Ils sont des gardes et ne doivent pas être utilisés comme threads de travail. Ils devraient être indépendants les uns des autres. Sinon, utilisez résolveurs et injection de dépendances pour les rendre dépendants les uns des autres. – cgTag

Répondre

3

Cela devrait fonctionner, mais je crois que les gardes sont exécutés en parallèle pas dans une séquence. Ainsi, le second n'attend pas que le premier renvoie une valeur. Cela ne devrait pas vraiment vous affecter si vos gardes sont synchrones, mais s'ils sont asynchrones, vous rencontrerez ce "problème".

Si vous voulez que vos gardes dépendent l'un de l'autre, vous pouvez séparer la partie commune de la vérification et tous vos gardes peuvent appeler cette logique. Mais je pense que dans la plupart des cas cela ne devrait même pas être nécessaire, car si seulement un d'entre eux échoue, la route n'est pas activée.

+0

Alors, que se passe-t-il si le second garde dépend du premier – phacic

+1

Je crois savoir que la meilleure pratique consiste à les écrire en tant que contrôles séparés/indépendants et qu'ils ne doivent pas dépendre l'un de l'autre. –

+1

Dûment noté. Merci beaucoup – phacic