2016-12-09 9 views
6

Ich versuche, Route Guard zu erstellen, lesen Sie ein paar Blogs und Angular 2 official documentation darauf. Aber ich kann es immer noch nicht schaffen.Angular 2 CanActivate funktioniert nicht

Hier ist RouteGuard (I Logging-Logik entfernt haben, dass Problem in Routing sicher sein, nicht in Authentifizierungslogik.):

import { Observable } from 'rxjs/Observable'; 
import { Injectable } from '@angular/core'; 
import { Router, CanActivate, CanActivateChild, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 

@Injectable() 
export class RouteGuard implements CanActivate { 
    constructor() { 
    var a = 5; 
    console.log("RouterGuard called"); 
    } 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    console.log("RouterGuard called"); 
    return true; 
    } 
} 

Hier habe ich ein paar Routen haben:

import { RouteGuard } from './common/routeGuard'; 
import { ClassifiersComponent } from './components/classifiers/classifiers.component'; 
import { Routes } from '@angular/router'; 
import { HomeComponent } from './components/home/home.component'; 

export const routes: Routes = [ 
    { path: '', component: HomeComponent }, 
    { path: 'classifiers', component: ClassifiersComponent, canActivate: [RouteGuard] }, 
]; 

Und ich gebe sie in Bootstrap-Methode dann:

import { RouteGuard } from './app/common/routeGuard'; 
import { ClassifiersComponent } from './app/components/classifiers/classifiers.component'; 
import { HomeComponent } from './app/components/home/home.component'; 
import { routes } from './app/app.routes'; 

@NgModule({ 
    imports: [ 
     RouterModule.forRoot(routes) 
    ], 
    providers: [ 
     { provide: LocationStrategy, useClass: PathLocationStrategy }, 
     { provide: APP_BASE_HREF, useValue: '/' }, 
     RouteGuard 
    ], 
    declarations: [ 
     AppComponent, 
     HomeComponent, 
     ClassifiersComponent 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule {} 

ich bin nicht sicher, was mit diesem falsch ist Vielleicht fehlt mir etwas Wichtiges. Aus dem Debuggen kann ich sagen, dass es canActivate() Breakpoint trifft, aber nicht console.log ausführt, dasselbe gilt für Konstruktor.

BEARBEITEN: Andere Routen, bei denen keine Route Authentifizierung funktioniert gut.

EDIT2: Ich verwende Winkel/core 2.2.0 Winkel/Router 3.2.0

+0

Wie ist das aktuelle Verhalten? Was ist das erwartete Verhalten? –

+0

Derzeit blockiert es die Route? Ich bin mir nicht sicher, weil es nichts in der Konsole schreibt. Es sollte geschrieben werden, dass RouteGuard angerufen wird. Und der Router sollte nicht blockiert werden, da canActivate() immer true zurückgibt; – Leon

+0

"RouterGuard called" wird ** nicht ** auf der Browser-Konsole ausgegeben? –

Antwort

-1

Update Winkel/Kern 2 0,0, eckig/Router 3. .0 löste dieses Problem, ich habe keine Ahnung warum.

+0

Hat nicht für mich funktioniert. –