在Angular2中的CanActivate中注入服务

时间:2016-11-09 16:40:05

标签: angular service dependency-injection angular2-guards

我正在尝试为我的路线创建一个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,
],

其他服务(例如CookieServiceHttp等)注入正常,但UserAccountService有此问题。

以下是服务的定义:

 @Injectable()
 export class UserAccountService {

   private currentUser: any = {};

   constructor(private cookieService: CookieService, private http: InterceptorService) {
   }
 }

2 个答案:

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