2016-11-09 4 views
0

Я пытаюсь создать службу Guard Guard для своих маршрутов. В этой службе мне нужно ввести UserAccountService, который я использую, чтобы вернуть текущего зарегистрированного пользователя.Инъекционные услуги в CanActivate в Angular2

Это мой охранник:

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

Просто определить сервис для 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 {} 
1

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

import { UserAccountService } from '../'; 

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

Смежные вопросы