2016-12-09 162 views
6

我正在嘗試創建路線衛兵,閱讀一些博客並在其上寫下Angular 2 official documentation。但我仍然無法完成工作。Angular 2 CanActivate不起作用

這裏的RouteGuard(我已經刪除記錄的邏輯,以確保問題是路由,而不是驗證邏輯。):

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; 
    } 
} 

在這裏,我有一些路線:

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] }, 
]; 

而且那麼我通過他們在引導程序的方法:

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 {} 

我不知道這是什麼毛病,可能是我錯過了一些重要的東西。從調試我可以告訴它正在打canActivate()斷點,但不執行console.log,同樣適用於構造函數。

編輯: 沒有任何路由認證的其他路由工作正常。

EDIT2: 我使用 角/芯2.2.0, 角/路由器3.2.0

+0

目前的行爲是什麼?預期的行爲是什麼? –

+0

目前它阻止路線?我不確定,因爲它不會在控制檯寫任何東西。應該寫出RouteGuard被調用。並且不應該阻止路由,因爲canActivate()總是返回true; – Leon

+0

因此''RouterGuard叫''是**不是**被打印到瀏覽器控制檯? –

回答

-1

更新到角/芯2 0.0,角/路由器3。 .0解決了這個問題,我不知道爲什麼。

+0

沒有爲我工作。 –

相關問題