有没有一种方法可以将服务注入(inject)到类中而不必将其声明为构造函数的参数?
通常的方法工作得很好,我对此没有任何提示。我只是想创建一个父类(super class)来处理一些依赖于服务的东西,我希望它是独立的,我不想在子类上引用该服务。
这是通常的方式:
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() 时,我必须传递在我的父类(super class)的构造函数中定义的参数。但这正是我不想做的。我希望我的组件甚至不知道父类(super class)内部使用的服务。
最佳答案
是的:使用 Injector。 https://angular.io/api/core/Injector
import { Injector } from '@angular/core';
然后在你的构造函数中:
constructor(injector: Injector) {
let this.service = injector.get(ServiceToInject);
}
关于Angularjs 4 - 注入(inject)服务而不在构造函数上传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46530036/