0

我有一个非常大的组件,它与用于加载数据的服务一起使用,而不是重新编写用于处理新服务的类似组件,我编写了一个与第一个具有所有相同功能的服务,我尝试动态更改使用输入在组件的构造函数中注入服务。

所以我会有:

@Input() isLocal= false;

private service: Service1|Service2;

constructor(private injector: Injector) {
  if (this.isLocal) {
    this.service = injector.get(Service1);
  } else {
    this.service = injector.get(Service2);
  }
}

我的问题是我无法在构造函数中访问我的输入,也无法在 ngOnInit 中初始化我的服务。我怎样才能做到这一点?

4

1 回答 1

1

如果您按照此处所述实现工厂模式,那将是最好的:

angular.service 与 angular.factory

但是为此,您可以使用 Angular 核心中的 Injector 类:

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

@Input() isLocal= false;
...

constructor(private injector: Injector){ 

  if(this.isLocal) {
    this.oneService = <OneService>this.injector.get(Service1);
  } else {
    this.twoService = <TwoService>this.injector.get(Service2);
  }
}
于 2021-01-25T16:57:40.437 回答