我有一个类 parent
和 child
。 child
类继承自 parent
。 我需要将可注入的类 service
注入到 parent
中,因为所有的 child
都会使用它。 我该怎么做?
我有一个类 parent
和 child
。 child
类继承自 parent
。 我需要将可注入的类 service
注入到 parent
中,因为所有的 child
都会使用它。 我该怎么做?
Injector
类注入任何父级服务或类。你需要从子级注入Injector
类,并通过super(injector)
将其传递给父级,以便父级可以从来自子级的注入器中注入可重用的服务。
父类:
export class BaseComponent implements OnInit {
protected myService: MyService
constructor(injector: Injector) {
this.myService = injector.get(MyService)
}
ngOnInit() {
console.log('ngOnInit from Base');
}
}
子类:
export class AppComponent extends BaseComponent {
constructor(injector: Injector) {
super(injector)
}
ngOnInit() {
super.ngOnInit()
this.myService.getUsers()
}
}
使用这种方法,您不需要从子级注入每个服务以逐个传递到父级,上述方法更有效地从父级注入。
super
传递依赖项。例如:
class Parent {
constructor(protected someService: SomeService) { }
}
@Injectable()
class Child extends Parent {
constructor(someService: SomeService) {
super(someService);
}
}
如果Parent
实际上不需要该依赖项,最好在子类上使用@Injectable()
,这些子类可以有自己私有的依赖项引用。
创建一个只有一个静态属性的类:
export class AppModuleServices{
static injector: Injector;
}
然后在创建服务的模块中设置注入器的值:
import {Injector, NgModule} from '@angular/core';
@NgModule({
providers: MyService
})
export class AppModule {
constructor(private injector: Injector) {
AppModuleServices.injector = this.injector;
}
}
只要模块已经被实例化,您现在可以在任何类中使用静态注入器,并检索模块的任何服务:
export class MyParentClass {
private myService: MyService;
constructor () {
this.myService = AppModuleServices.get<MyService>(MyService);
}
}