Переменные конфигурации Angular загрузки во время выполнения из файла .json с App_Initializer
Я хочу загрузить переменные конфигурации из файла json во время выполнения для создания моего приложения Angular
Я создал свой json-файл app.conf.json в каталоге src, он содержит:
{
"API_URL": "http://localhost/backend/",
"SERVER_URL": "http://localhost/MyApp/assets/uploads"
}
Я создал абстрактный класс AppConfig:
export abstract class AppConfig {
API_URL: string;
SERVER_URL: string;
}
Я создал сервис
import { Injectable } from '@angular/core';
import {AppConfig} from './app-config';
import {HttpClient} from '@angular/common/http';
// to stock data
declare var window: any;
@Injectable({
providedIn: 'root'
})
export class JsonAppConfigService extends AppConfig {
constructor(private httClient: HttpClient) {
super();
}
/** Cette fonction va retourner une promise (charger le fichier app.config.json
* depuis le repertoire src du frontend
*/
load() {
return this.httClient.get<AppConfig>('app.config.json')
.toPromise()
.then(data => {
this.API_URL = data.API_URL;
this.SERVER_URL = data.SERVER_URL;
this.ldaps = data.ldaps;
window.config = data;
console.log(window.config);
})
.catch(() => {
console.log('Erreur : le fichier de configuration ne peut pas être chargé ');
});
}
}
После этого в app.module.ts я создал провайдера:
export function appInitializer(jsonAppConfigService: JsonAppConfigService) {
return () => {
return jsonAppConfigService.load();
};
}
providers [ ...,
{ provide: AppConfig, deps: [HttpClient], useExisting: JsonAppConfigService},
{ provide: APP_INITIALIZER, deps: [JsonAppConfigService], useFactory: appInitializer,
multi: true},
]
Теперь мой файл загружен, и я хочу передать данные (window.config) в свой файл environment.ts, для этого я создал класс, в котором среда может расширяться:
declare var window: any;
export class DynamicEnvironment {
public get environment() {
return window.config;
}
}
И в моем файле envronment.ts:
import { DynamicEnvironment } from './dynamic-environment';
class Environment extends DynamicEnvironment {
public production: boolean;
constructor() {
super();
this.production = false;
}
}
export const environment = new Environment();
console.log(environment);
И проблема в том, что я не могу получить данные в файл среды, и я не знаю, почему и где ошибка? это в моей переменной окна? или есть другой способ получить данные в файле environemnt?
большое спасибо за вашу помощь с уважением