Angular AppConfig загружен с сервера, но необходим при настройке модуля

В Интернете есть много примеров получения конфигурации в APP_INITIALIZER в angular (теперь 8), вот один, который подводит итог: https://davembush.github.io/where-to-store-angular-configurations/

NgModule наконец-то выглядит так

@NgModule({
 // ...
  imports: [
    BrowserModule,
    HttpClientModule,
    // My modules here
    AngularFireModule.initializeApp(firebaseConfigHere)
  ],
  providers: [{
      provide: APP_INITIALIZER,
      useFactory: load,
      deps: [
        HttpClient,
        ConfigService
      ],
      multi: true
    }
  ],
 // ...
})

Я застрял, потому что у меня есть модули, которые инициализируются с конфигурацией, один из которых - печально известный AngularFireModule, подобный этому

AngularFireModule.initializeApp(firebaseConfigHere)

Я перепробовал так много трюков, кажется, не могу понять, как мы передаем конфигурации, загруженные с сервера, в модули, настроенные в импорте?

Обратите внимание, что импорт срабатывает до APP_INITIALIZER.


person Ayyash    schedule 03.09.2019    source источник


Ответы (1)


1: предоставить пожарный модуль без вызова initializeApp; 2: предоставить фабрику для токена FirebaseOptionsToken с зависимостью ConfigService 3: предоставить все, что вы передадите в initializeApp в качестве второго параметра для FirebaseNameOrConfigToken

@NgModule({
  imports: [BrowserModule,HttpClientModule,AngularFireModule],
  providers: [
   {/* your APP_INITIALIZER here */}
   { provide: FirebaseNameOrConfigToken, useValue: null},
   { 
    provide: FirebaseOptionsToken,
    useFactory: (configService: ConfigService) => configService.pathToFirebaseConfig},
    deps: [ConfigService]
  ]
})

это заставит фабрику вызываться лениво. Обратите внимание, что вы не можете внедрить что-либо, связанное с модулем firebase, в ConfigService или другие зависимости инициализатора, потому что предложенная мной фабрика будет вызываться до того, как прибудет конфигурация.

person Andrei    schedule 03.09.2019
comment
Я пробовал это, APP_INITIALIZER по-прежнему запускается позже, чем фабрика для токена, и это уже промис, который устанавливает конфигурацию, поэтому к тому времени, когда он загружает конфигурацию, фабрика уже пыталась получить pathToFirebaseConfig. Вы когда-нибудь реализовывали это? - person Ayyash; 04.09.2019