我正在嘗試創建路線衛兵,閱讀一些博客並在其上寫下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
目前的行爲是什麼?預期的行爲是什麼? –
目前它阻止路線?我不確定,因爲它不會在控制檯寫任何東西。應該寫出RouteGuard被調用。並且不應該阻止路由,因爲canActivate()總是返回true; – Leon
因此''RouterGuard叫''是**不是**被打印到瀏覽器控制檯? –