2016-12-23 12 views
9

W moim projekcie mam dwóch strażników. AuthGuard i PermissionGuard. Najpierw muszę uruchomić AuthGuard, a kiedy to się zakończy, a jeśli prawda, to zaczyna się pozwolenieGuard, ale teraz strażnicy pracują równolegle, a narzędzie PermissionsGuard nie działa dobrze. sposób, w jaki używałem tego problemu, to to, że nazwałem metodę AuthGuard CanActivate w Ochronie uprawnień, ale myślę, że jest na to lepszy sposób.Angular2 run Straż po rozwiązaniu innej osłony

+0

może [ta odpowiedź] (http://stackoverflow.com/a/40590812/6942210) może pomóc. Myślę, że ma ten sam problem. –

+0

dzięki, odpowiedź na pytanie, które wymieniłeś, jest taka sama jak ja, ale jak powiedziałem, myślę, że może być lepszy sposób. –

+0

@ hosseinahmadi. Czy nadal potrzebujesz pomocy w tym zakresie? – AngularChef

Odpowiedz

2

Byłem w tej samej sytuacji kilka tygodni temu, więc postanowiłem napisać nieco "hacky" rozwiązanie, aby osiągnąć to poprzez wykorzystanie atrybutu data obiektu definicji trasy.

Chodzi o to, aby zdefiniować własne straży (nazwijmy go MainGuard), która będzie czytać atrybut danych (np guardsList) z tablicą strażników wewnątrz MainGuard.canActivate funkcji i wykonać je (poprzez wywołanie guardsList[i].canActive) jeden po drugim w pętla. Będziesz musiał użyć aplikacji Injector, aby móc zadzwonić pod numer canActivate podanego strażnika.

robi się trochę bardziej skomplikowane, gdy chcesz wesprzeć Observable, Promise, a zwykły boolean strażników pod jednym guardsList tablicy, jak trzeba się zapisać i poczekać na zakończenie itp

I zostały wdrożone ten „hack” jako Angular Library który pozwala zrobić coś takiego:

const appRoutes: Routes = [ 
{ 
    ... 
    canActivate: [SequentialGuards], 
    data: { GUARDS_SEQ: [Guard1, Guard2, Guard3] } 
    ... 
}] 
Powiązane problemy