在Angular中注入参数化依赖项和手动引导
在引导angular应用程序之前,我需要执行一个异步操作,为应用程序返回一些上下文。在开始之前,我需要用这些返回的数据初始化一些第三方存储库,然后我想将这个存储库注入到我的应用程序的服务中。我正在寻找一种合适的、干净的方法,因为我现在拥有的方法对我来说有点粗糙在Angular中注入参数化依赖项和手动引导,angular,Angular,在引导angular应用程序之前,我需要执行一个异步操作,为应用程序返回一些上下文。在开始之前,我需要用这些返回的数据初始化一些第三方存储库,然后我想将这个存储库注入到我的应用程序的服务中。我正在寻找一种合适的、干净的方法,因为我现在拥有的方法对我来说有点粗糙 app.module.ts内容: let repo; //this is what i'd like to avoid @NgModule({ declarations: [ AppComponent ]
app.module.ts
内容:
let repo; //this is what i'd like to avoid
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ReactiveFormsModule
],
providers: [
{
provide: SomeService, useFactory: () => new SomeService(repo)
}
],
entryComponents: [AppComponent]
})
export class AppModule implements DoBootstrap {
ngDoBootstrap(app: ApplicationRef) {
//some async operation which returns context data
setTimeout((data) => {
repo = Some3rdPartyDatabaseSDK.init(data.token, data.repoConfig)
app.bootstrap(AppComponent);
}, 3000);
}
}
可以做得更好吗?对于这种情况,您应该使用APP\u INITIALIZER,在初始化angular APP时调用此函数 Angular将在应用程序初始化时执行提供的功能。我将等待 如果函数返回一个承诺,则初始化,直到该承诺得到解决
AppLoadService
提供程序中设置APP\u初始值设定项
@Injectable()
导出类AppLoadService{
回购:任何;
init():承诺{
返回新承诺((解决、拒绝)=>{
log('应用程序尚未初始化');
设置超时(()=>{
log('App initialized');
this.repo='某些值';
解决();
}, 5000);
});
}
}
应用程序模块.ts
从'@angular/core'导入{NgModule,APP_初始值设定项};
函数init_app(appLoadService:appLoadService){
return()=>appLoadService.init();
}
@NGD模块({
供应商:[
AppLoadService,
{提供:APP_初始值设定项,useFactory:init_APP,deps:[AppLoadService],multi:true}
]
})
导出类AppModule{}
您正在寻找APP\u初始值设定项
是在开发时需要的还是在生产中(构建后)也需要它?@Plochie in prod.Angular应用程序将在iframe中运行,父框架将通过posMessage@akn您需要APP\u初始值设定项然后按照@yurzui的建议。@Plochie,没有。我得先了解一下。仍然欢迎举例回答:)