Angular APP_初始值设定项提供程序将一个注入的服务作为未定义的服务,但其他服务被注入的很好
基本上,我有一个应用程序初始化运行的供应商。一个服务被注入没有问题,但另一个返回未定义。我尝试在它们的两个构造函数上都放一个console.log语句,它们都在我的提供程序之前运行,所以我不知道为什么在我尝试使用它时只有一个未定义 感谢所有的帮助 这是我的密码。如果你需要更多,请告诉我 应用模块Angular APP_初始值设定项提供程序将一个注入的服务作为未定义的服务,但其他服务被注入的很好,angular,dependency-injection,angular6,angular7,angular8,Angular,Dependency Injection,Angular6,Angular7,Angular8,基本上,我有一个应用程序初始化运行的供应商。一个服务被注入没有问题,但另一个返回未定义。我尝试在它们的两个构造函数上都放一个console.log语句,它们都在我的提供程序之前运行,所以我不知道为什么在我尝试使用它时只有一个未定义 感谢所有的帮助 这是我的密码。如果你需要更多,请告诉我 应用模块 @NgModule({ 声明:[ // ... ], 入口组件:[ // ... ], 进口:[ // ... ], 供应商:[ 应用程序提供商, // ... { 提供:应用程序初始化器, useFa
@NgModule({
声明:[
// ...
],
入口组件:[
// ...
],
进口:[
// ...
],
供应商:[
应用程序提供商,
// ...
{
提供:应用程序初始化器,
useFactory:(提供程序:AppProvider)=>()=>provider.load(),
deps:[AppProvider],
多:真的
}],
引导:[AppComponent]
})
导出类AppModule{
}
应用程序提供商
@Injectable({providedIn:'root'})
导出类AppProvider{
建造师(
// ...
私人参与服务:参与服务,
专用DST服务:DST服务){
}
加载(){
//...
console.log(participantService);//打印未定义
console.log(dstService);//打印服务
// ...
返回承诺。解决();
}
}
参与服务
@Injectable({providedIn:'root'})
导出类参与服务{
// ...
构造函数(私有http:HttpClient,
// ...
专用路由器(路由器){
}
// ...
}
数据传输服务
@Injectable({providedIn:'root'})
导出类服务{
// ...
构造函数(私有http:HttpClient,
私人参与服务:参与服务,
// ...
专用路由器(路由器){
}
// ...
}
提前谢谢很抱歉误导您<代码>注入函数似乎只注入令牌。因此,我们可以使用
INJECTOR
token将服务注入器注入到令牌中。所以它变成了这样:
import { SOME_TOKEN } from "./token";
import { NgModule, inject, INJECTOR } from "@angular/core";
@NgModule({
imports: [BrowserModule, FormsModule],
declarations: [AppComponent, HelloComponent],
bootstrap: [AppComponent],
providers: [
HelloService,
{
provide: SOME_TOKEN,
useFactory: () => {
return inject(INJECTOR)
.get(HelloService)
.getHello();
}
}
]
})
export class AppModule {}
以下是工作示例。尝试以下操作:
{provide:APP\u初始值设定项,useFactory:()=>inject(AppProvider).load(),multi:true}
错误:inject()必须从注入上下文调用此问题的任何解决方案?面对相同的问题,我向列表中添加了一个空服务,该服务不做任何操作,但首先加载。这有助于我的场景,但我想知道为什么应用程序\u引导\u侦听器不适合here@javapedia.net抢手货原因是我在发帖的时候没有想到。但是,由于APP\u BOOTSTRAP\u LISTENER
提供了一个回调函数,可以为每个引导组件运行。在引导过程之后调用回调。所以它可能仍然不合适。