我创建了一个角度2 / web api应用程序,其中我有一个Startpage
,用户不必登录,不像应用程序的其他部分。这个设置适用于Startpage
组件,但现在我想在我的路由模块中添加一个子路由messages
,突然我在控制台中看到以下错误消息:Error: no provider for TokenGuard
。这是我的路由模块的内容
const routes: Routes = [
{
path: '',
component: MainComponent,
children: [
{
path: '',
component: MainNavigationComponent,
children: [
{
path: 'messages',
component: MessagesComponent,
resolve: { connection: ConnectionResolver }
},
{
path: 'todos',
component: TodosComponent,
resolve: { connection: ConnectionResolver }
},
{
path: 'startpage',
canActivate: [TokenGuard],
canActivateChild: [TokenGuard],
component: StartpageComponent,
children: [
{
path: 'messages',
component: MessagesComponent
}
]
}
]
}
]
}];
TokenGuard
import {StartpageService} from 'startpage.service';
import {Injectable} from '@angular/core';
import {CanActivate, Router,ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild} from '@angular/router';
@Injectable()
export class TokenGuard implements CanActivate, CanActivateChild {
constructor(
private startPageService: StartpageService,
private router: Router
) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.startPageService.validateToken();
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.canActivate(route, state);
}
}
将TokenGuard添加到app.module提供程序
@NgModule({
.....,
providers:[..., TokenGuard]
})