Инъекционные услуги в CanActivate в Angular2

Я пытаюсь создать аутентичную службу охраны для моих маршрутов. В этом сервисе мне нужно внедрить 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) {
   }
 }

2 ответа

Спасибо за ваш ответ Гюнтер. На самом деле проблема была в этой строке:

import { UserAccountService } from '../';

Я должен был ссылаться на UserAccountService из его фактического местоположения, а не из /index файл.

Просто определите сервис для 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 {}
Другие вопросы по тегам