我正在尝试为我的路线创建一个auth Guard服务。在这项服务中,我需要注入我用来返回当前登录用户的UserAccountService。
这是我的后卫:
import { Injectable, Inject } from '@angular/core';
import { CanActivate } from '@angular/router';
import { UserAccountService } from '../';
@Injectable() export class ClaimsGuardService implements CanActivate
{
constructor(private user: UserAccountService) { }
canActivate(route, state) {
return true;
}
}
UserAccountService
可以很好地注入组件,它包含在我的app.module
:
providers: [
provideInterceptorService([
new ServerURLInterceptor(new CookieService())
]),
ClaimsGuardService,
CookieService,
UserAccountService,
],
其他服务(例如CookieService
,Http
等)注入正常,但UserAccountService
有此问题。
以下是服务的定义:
@Injectable()
export class UserAccountService {
private currentUser: any = {};
constructor(private cookieService: CookieService, private http: InterceptorService) {
}
}
答案 0 :(得分:1)
感谢您对Gunter的回复。实际上问题出在这一行:
import { UserAccountService } from '../';
我必须从其实际位置而不是/index
文件中引用UserAccountService。
答案 1 :(得分:0)
只需为canActivate
定义服务(例如CanActivateTeam
)。如果CanActivateTeam
具有构造函数参数,则它们将从DI传递。
https://angular.io/docs/ts/latest/api/router/index/CanActivate-interface.html
@NgModule({ imports: [ RouterModule.forRoot([ { path: 'team/:id', component: TeamCmp, canActivate: [CanActivateTeam] } ]) ], providers: [CanActivateTeam, UserToken, Permissions] }) class AppModule {}