2016-12-23 1 views
9

In meinem Projekt habe ich zwei Wachen. AuthGuard und PermissionGuard. Ich muss zuerst AuthGuard laufen lassen und wenn es gelöst ist und wenn das wahr ist, startet der permissionGuard, aber jetzt laufen diese Wächter parallel und permissionGuard funktioniert nicht gut. Die Art und Weise, wie ich für dieses Problem verwendet habe, ist, dass ich die AuthGuard CanActivate-Methode in Permission Guard aufgerufen habe, aber ich denke, dass es einen ziemlich besseren Weg dafür gibt.Angular2 run Guard nach einer anderen Wache aufgelöst

+0

Vielleicht [diese Antwort] (http://stackoverflow.com/a/40590812/6942210) kann Ihnen helfen. Ich denke, er hat das gleiche Problem. –

+0

danke, die Antwort auf die Frage, die du erwähnt hast, ist die gleiche wie ich, aber wie gesagt, ich denke, dass es einen besseren Weg gibt. –

+0

@hosseinahmadi. Brauchst du noch Hilfe dabei? – AngularChef

Antwort

2

Ich war in der gleichen Situation vor ein paar Wochen, so beschlossen, etwas "hacky" Lösung zu schreiben, um dies zu erreichen, indem Sie data Attribut eines Route-Definition-Objekt verwenden.

Die Idee ist, Ihre eigene Wache zu definieren (nennen wir es MainGuard), die Ihre Daten Attribut gelesen wird (zB guardsList) mit einer Reihe von Wachen im Inneren MainGuard.canActivate Funktion und führen sie (durch guardsList[i].canActive Aufruf) nacheinander in ein Schleife. Sie müssen die App Injector verwenden, um canActivate bei gegebenem Schutz anrufen zu können.

Es wird ein wenig komplizierter, wenn Sie Observable, Promise und schlicht boolean Wachen unter einem guardsList Array unterstützen möchten, wie Sie für die Fertigstellung benötigen abonnieren und warten, usw.

ich implementiert haben dieses „hack“, wie Angular Library, die Sie so etwas wie dies zu tun erlaubt:

const appRoutes: Routes = [ 
{ 
    ... 
    canActivate: [SequentialGuards], 
    data: { GUARDS_SEQ: [Guard1, Guard2, Guard3] } 
    ... 
}] 
Verwandte Themen