Angular2中没有注入服务类

时间:2016-04-06 08:11:58

标签: dependency-injection angular angular-directive

昨天我已经把一切都搞定了。今天,在我重新启动环境之后,我尝试注入的一项服务现在始终是null

这是我的顶级组件(app.component.ts):

@Component({
  selector: 'priz-app',
  moduleId: module.id,
  templateUrl: './app.component.html',
  directives: [ROUTER_DIRECTIVES, SecureRouterOutlet],
  providers: [ROUTER_PROVIDERS, AuthenticationService]
})

该组件的模板包含: <secure-outlet signin="Login" unauthorized="AccessDenied"></secure-outlet>

secure-outlet实施如下:

@Directive({
    selector: 'secure-outlet'
})
export class SecureRouterOutlet extends RouterOutlet {
    @Input()
    signin: string;

    @Input()
    unauthorized:string;

    @Input()
    nameAttr: string;

    constructor(_elementRef: ElementRef, _loader: DynamicComponentLoader,
                private parentRouter: Router,
                private authService: AuthenticationService,
                public injector: Injector) {
        super(_elementRef, _loader, parentRouter, null);
    }
...

在构造函数以及指令中的任何其他位置,authService始终为null。我尝试在主要组件中定义指令内AuthenticationService的提供程序,即使在引导程序中,也没有任何作用。

我错过了什么?

谢谢,

1 个答案:

答案 0 :(得分:2)

不要将providers: [ROUTER_PROVIDERS]添加到组件,添加到bootstrap()

尝试提供与原始RouterOutlet类相同的参数,并在其后面添加您自己的依赖项。 不确定这是否有帮助,但我认为不久前提到有一个奇怪的问题:

constructor(
    _elementRef: ElementRef, 
    _loader: DynamicComponentLoader,
    private parentRouter: Router,
    @Attribute('name') nameAttr: string, // <= added
    private authService: AuthenticationService,
    public injector: Injector) {