Angularjs 4 - 在构造函数上不传递参数的情况下注入服务

时间:2017-10-02 16:49:32

标签: angular dependency-injection

有没有办法将服务注入类而不必将其声明为构造函数的参数?

通常的方式很好,我没有抱怨。我只是想创建一个超类来处理一些依赖于服务的东西,我希望它是独立的,我不想在子类上引用该服务。

这是通常的方式:

export class MyComponent {
  constructor(private someService: SomeNpmInstalledService) {}

  doSomething() {
    this.someService.do();
  }
}

这就是我在寻找的东西:

export class MyComponent {
  @Some injection magic annotation here
  private someService: SomeNpmInstalledService;

  constructor() {}

  doSomething() {
    this.someService.do();
  }
}

我将尝试用以下示例解释我想要这种功能的原因:

export class MyComponent extends MySuperClass {
  constructor() {
    super();
  }

  doSomething() {
    super.someSuperClassFonctionality(); 
  }
}

export class MySuperClass {
  constructor(private someService: SomeNpmInstalledService) {}

  someSuperClassFonctionality() {
    someService.doStuff(); 
  }
}

上面的代码给出了错误,因为在我的组件中,当我调用 super()时,我必须传递在我的超类的构造函数上定义的参数。但那正是我不想做的。我希望我的组件甚至不知道超类中使用的服务。

1 个答案:

答案 0 :(得分:0)

是:使用注射器。 https://angular.io/api/core/Injector

import { Injector } from '@angular/core';

然后在你的构造函数中:

constructor(injector: Injector) {
  let this.service = injector.get(ServiceToInject);
}