Angular 9使用提供程序扩展ServiceProviderComponent
我有一个ServiceProviderComponent,它唯一的工作就是提供服务。 我想通过另一个组件(HelloComponent)扩展此ServiceProviderComponent,以便可以在其中使用服务及其子组件。 如果不调用super(),如何实现这一点;在HelloComponent构造函数中使用该服务作为参数? 我尝试注入注入器,并使用Injector.create()提供服务,但它不起作用 我已经创建了一个演示。 在hello.component中,我想使用在ServiceProviderComponent中提供的基本测试令牌注入令牌的实例,但始终使用全局instance 我甚至可以扩展像ServiceProvider这样的组件吗 更新1 我已经用指令更新了我的。我希望此指令也使用hello.component的服务实例。Angular 9使用提供程序扩展ServiceProviderComponent,angular,typescript,dependency-injection,angular9,Angular,Typescript,Dependency Injection,Angular9,我有一个ServiceProviderComponent,它唯一的工作就是提供服务。 我想通过另一个组件(HelloComponent)扩展此ServiceProviderComponent,以便可以在其中使用服务及其子组件。 如果不调用super(),如何实现这一点;在HelloComponent构造函数中使用该服务作为参数? 我尝试注入注入器,并使用Injector.create()提供服务,但它不起作用 我已经创建了一个演示。 在hello.component中,我想使用在ServiceP
如何才能做到这一点?虽然理解您想要什么有点困难,但我相信通过使用
注入器
并使用注入器在构造函数中创建一个新注入器是可能的。create
方法
尽管.create
方法只允许所谓的静态提供者
,但您可以通过使用带有“useFactory:
--
不幸的是,对于您的更新,您必须从指令中扩展服务组件并注入注入器,并在超级调用中传递:
另一方面,这感觉就像是在反模式下工作,什么是角度谓词。你正在试图解决一些问题,这些问题要么用另一种方式解决,要么根本不解决。从你的问题中我看不出你的最终目标是什么我知道这并不能回答你的问题,但是为什么您要创建服务提供商组件而不是直接注入所需的服务?@marcel我想在不同的组件中有多个服务实例,但我不想在每个组件中都有“提供”行谢谢您的回答。你的例子几乎就是我需要的。我还有一个问题,我已经用你的例子的更新版本更新了我的帖子。你能告诉我如何做到这一点吗?谢谢你的更新。我的最终目标是,我有多个具有异步初始化的组件,它们都需要自己的http请求来接收数据。但它们可以相互依赖,所以我试图提供一个服务,在这个服务中,我可以控制我自己的生命周期,即所有组件的数据源初始化。这些组件是通过指令动态创建的,这些组件的组合可以多次出现。因此,我希望这个星座的每个实例都有一个自己的服务实例
@Component({
selector: 'hello',
template: `<h1>Hello {{name}}!</h1>`,
styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent extends ServiceProviderComponent implements OnInit {
@Input() name: string;
ngOnInit() {
this.name = this.testService.test();
}
}
@Directive()
export class ServiceProviderComponent {
protected testService: BaseTestService;
constructor(injector: Injector) {
injector = Injector.create(
[{ provide: BASE_TEST_TOKEN, useFactory: (...deps) => new TestServiceService(), deps: [] }],
injector
);
this.testService = injector.get(BASE_TEST_TOKEN);
}
}