2017-07-05 7 views
0

Ich habe folgendes Routing, die ich zur Anwendungskomponente importieren:Angular 2. CanActivate auf Last genannt nur

const routes: Routes = [ 
    { 
    path: '', 
    component: MainLayoutComponent, 
    children: [ 
     { 
     path: '', redirectTo: 'main', pathMatch: 'full' 
     }, 
     { 
     path: 'main', loadChildren: 'app/main/main.module#MaindModule' 
     }, 
     { 
     path: 'cars', loadChildren: 'app/cars/cars.module#CarsModule' 
     } 
    ], 
    canActivate: [AuthGuard]  
    }, 
    { 
    path: 'auth', 
    component: EmptyLayoutComponent, 
    loadChildren: 'app/auth/auth.module#AuthModule' 
    }, 
    { 
    path: '**', 
    redirectTo: 'main' 
    } 
]; 

export const routing: ModuleWithProviders = RouterModule.forRoot(routes); 

Wie Sie ich habe canActivate sehen können. Ich bemerkte, dass AuthGuard aufgerufen wird, wenn ich die Anwendung in ersten Mal oder Schreibadresse in den Browser öffnen, aber wenn ich mein Menü URL ändern, dann wird AuthGuard nicht genannt:

<a routerLink="/cars"> 

Was habe ich falsch gemacht?

AuthGuard:

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private authService: AuthService, 
       private router: Router) {} 

    canActivate() { 
    if (!this.authService.authenticated) { 
     this.router.navigate(['/auth/login']); 
     return false; 
    } 
    return true; 
    } 
} 
+0

Code von 'AuthGuard'? –

+0

@TouqeerShafi Ich glaube nicht, dass es mit AuthGuard selbst zusammenhängt, aber ich habe die Frage aktualisiert. – user348173

+0

Vielleicht tut ['canActivateChild'] (https://angular.io/api/router/CanActivateChild), was Sie wollen. –

Antwort

3

Es scheint, dass CanActivate nur auf der übergeordneten leer Route festgelegt ist. Wenn Sie möchten, dass es beim Navigieren zwischen untergeordneten Routen erneut ausgeführt wird, sollten Sie stattdessen canActivateChild verwenden.

+0

Sie haben Recht. Vielen Dank. – user348173

Verwandte Themen