Инъекционные услуги в 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 {}