Как определить переменную во внешнем файле конфигурации и использовать ее в app.module

В Ionic 3 с Angular 5 я пытаюсь определить все свои внешние ключи API внутри файла app.config.ts.

Я должен объявить класс, иначе я получу ошибку AOT, вызванную ngc.

Вот мой app.config.ts

import { Injectable } from '@angular/core';

@Injectable()
export class AppConfig {
  public ONESIGNAL_API_KEY: string;
  public FIREBASE_CONFIG: any;
  public MIXPANEL_TOKEN: string;

  constructor() {
    this.ONESIGNAL_API_KEY = 'myoskey';
    this.FIREBASE_CONFIG = {
      apiKey: "myfbkey",
      authDomain: "myfbdomain
      };
    this.MIXPANEL_TOKEN = 'mymptoken';
  }
}

Я могу внедрить его в конструкторы других классов, но firebase должен быть инициализирован в app.module.ts. Итак, я попытался сделать следующее // Config

import {AppConfig} from './app-config';
...
imports: [
    BrowserModule,
    HttpClientModule,
    IonicModule.forRoot(MyApp, {
      backButtonText: '',
      tabsHideOnSubPages: true,
      //scrollAssist: true,
      //autoFocusAssist: true
    }),
    IonicStorageModule.forRoot(),
    IonicImageLoader.forRoot(),
    AngularFireModule.initializeApp(AppConfig.FIREBASE_CONFIG),
    ....

К сожалению, я получаю следующую ошибку Property 'FIREBASE_CONFIG' does not exist on type 'typeof AppConfig'.

Как можно объявить FIREBASE_CONFIG в этом файле app.config и напрямую использовать его в app.module?

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

import { Injectable } from '@angular/core';

@Injectable()
export class AppConfig {
  public ONESIGNAL_API_KEY: string;
  public FIREBASE_CONFIG: any = {
      apiKey: "myfbkey",
      authDomain: "myfbdomain
      };
  public MIXPANEL_TOKEN: string;

  constructor() {
    this.ONESIGNAL_API_KEY = 'myoskey';
    this.MIXPANEL_TOKEN = 'mymptoken';
  }
}

Есть идеи?


person Manuel RODRIGUEZ    schedule 09.12.2017    source источник


Ответы (1)


вы можете использовать перечисление:

export enum AppConfig {
    ONESIGNAL_API_KEY = 'myoskey',
    MIXPANEL_TOKEN = 'mymptoken'
}

export const FIREBASE_CONFIG = {
    apiKey : "myfbkey",
    authDomain : "myfbdomain"
}

и вы используете его, как и вы:

import {AppConfig ,FIREBASE_CONFIG  } from './config';
...
imports: [
    //...
    AngularFireModule.initializeApp(FIREBASE_CONFIG)

Примечание. Вы получаете эту ошибку, потому что пытаетесь получить доступ к AppConfig.FIREBASE_CONFIG, а FIREBASE_CONFIG является нестатическим свойством класса AppConfig.

person El houcine bougarfaoui    schedule 09.12.2017
comment
Я получаю следующую ошибку относительно FIREBASE_CONFIG с вашим методом: Computed values are not permitted in an enum with string valued members. - person Manuel RODRIGUEZ; 10.12.2017
comment
Как только я использую что-то еще, кроме класса, я получаю следующую ошибку (начиная с Angular 5, я думаю): Error encountered resolving symbol values statically. Could not resolve ./app-config.ts relative to /Users/me/myproj/src/app/app.module.ts., resolving symbol AppModule in /Users/me/myproj/src/app/app.module.ts, resolving symbol AppModule in /Users/me/myproj/src/app/app.module.ts, resolving symbol AppModule in /Users/me/myproj/src/app/app.module.ts Error: The Angular AoT build failed. - person Manuel RODRIGUEZ; 10.12.2017