0
我有一個使用Angular 4的小引導問題。 我有一個配置文件(json),當我的應用程序啓動時從服務器加載(另請參閱here)。這工作到目前爲止。在APP_INITIALIZE後初始化其他提供程序
現在我有一個dependency需要配置值傳遞給一個forRoot方法。實施看起來是這樣的:
static forRoot(config: AppInsightsConfig): ModuleWithProviders {
return {
ngModule: ApplicationInsightsModule,
providers: [
{ provide: AppInsightsConfig, useValue: config }
]
};
}
我的想法是導入模塊,而不forRoot(),但CONFIGS(從服務器)後,通過提供AppInsightsConfig已經加載。
@NgModule({
bootstrap: sharedConfig.bootstrap,
declarations: [...sharedConfig.declarations],
imports: [
BrowserModule,
FormsModule,
HttpModule,
ApplicationInsightsModule,
...sharedConfig.imports
],
providers: [
{ provide: 'ORIGIN_URL', useValue: location.origin },
{ provide:
APP_INITIALIZER,
useFactory: (configService: ConfigService) =>() => configService.load(),
deps: [ConfigService], multi: true
},
{ provide:
AppInsightsConfig,
useFactory: (configService: ConfigService) => {
// outputs undefined, expected it to have the config
console.log(configService.config);
return { instrumentationKey: 'key from config' }
},
// My idea was, if I add APP_INITIALIZER as dependency,
// the config would have been loaded, but this isn't the case.
deps: [APP_INITIALIZER, ConfigService]
},
AppInsightsService
]
})
我如何提供AppInsightsConfig或AFTER我CONFIGS另一個服務已裝?
您是使用路由還是在您自己的模塊上實現'forRoot'? –
@Maximus否,forRoot打算從該第三方模塊的模塊中調用。 [見這個源文件](https://github.com/MarkPieszak/angular-application-insights/blob/master/index.ts) – martinoss
你不能那樣做。從我對上面的代碼的理解中,你不需要。沒有'configService'的代碼,但是你可以在'AppInsightsConfig'中鏈接一個承諾並且修補返回的對象。 AppInsightsConfig最初不會有instrumentationKey,但在app init之後會有。 'deps:[APP_INITIALIZER,'會搞砸DI,但無濟於事。 – estus