Установите глобальные переменные в Angular 6 согласно выходным данным API - api


0

По сути, мне нужен файл environment.ts для одноразового вызова внешнего API, а затем я хочу установить эту переменную в своем файле global.ts, который затем я буду использовать в различных компонентах по всему миру. Я могу добиться этого без вызова API, добавив статические значения в environment.ts. Мне нужно сделать его динамическим на основе API.

Например, у меня есть environment.ts как

export const environment = {
  defaultCountry: US,
};

Затем я использую это в global.ts как,

defaultCountry: environment.defaultCountry,

Я хочу, чтобы эта DefaultCountry была динамической на основе API, например,

export const environment = {
      defaultCountry: this.api.subscribe() == true? US: CA,
    };

Если этот подход неверен, подскажите, пожалуйста, как мне его достичь, поскольку я не могу вызвать API из файла environment.ts. Заранее спасибо.

Изменение: Кроме того, это должно быть установлено при запуске приложения, и он не должен выдавать любую асинхронную ошибку, если API не работает.

Источник
  •  46
  •  1
  • 3 май 2020 2020-05-03 14:29:56

1 ответ

1

Используя APP_INITIALIZER, я смог решить свою проблему...

1.Добавлен следующий код в app.module.ts:

{
      provide: APP_INITIALIZER,
      useFactory: (configService: ConfiguartionService) =>
        () => configService.loadConfigurationData(),
      deps: [ConfiguartionService],
      multi: true
    }

2.Создал ConfigurationService, который будет вызывать API и извлекать данные как,

loadConfigurationData(): Promise<any> {
    return this.http.get<any>("your api").toPromise().then((result) => {
      this.configData = result.data;
    })
  }

3. Полученные переменные configdata в любом компоненте как,

this.config = this.configService.config;

Ссылка: стекоперемещение hackernoon