首页 > 解决方案 > 在应用模块导入模块之前加载配置文件

问题描述

我试图在我的应用程序模块导入其模块之前加载配置文件,因此我可以在应用程序模块导入模块时使用配置文件。

现在配置文件的加载发生在 app 模块的 providers 部分,该部分在 imports 部分之后加载。

这是我的代码:

import {BrowserModule} from '@angular/platform-browser';
import {APP_INITIALIZER, NgModule} from '@angular/core';

import {AppComponent} from './app.component';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {Routes, Router, RouterModule} from '@angular/router';
import {MatGridListModule, MatCardModule, MatMenuModule, MatIconModule, MatButtonModule} from '@angular/material';
import {LayoutModule} from '@angular/cdk/layout';
import {
  IMqttMessage,
  MqttModule,
  IMqttServiceOptions
} from 'ngx-mqtt';
import {DatePipe} from '@angular/common';
import {AppConfigService} from './shared/services/app-config.service';
import {IAppConfig} from '../assets/config/app-config.module';
import {HttpClientModule} from '@angular/common/http';
import * as path from 'path';
import {hostname} from 'os';


export function initializeApp(appConfig: AppConfigService) {
  console.log('init');
  return () => appConfig.load();
}


export function MqttServiceOptionsConf(): IMqttServiceOptions {
  console.log('init2');

  const appConfiguration = AppConfigService.settings;

  const mqttopt: IMqttServiceOptions = {hostname: appConfiguration.MqttProps['HostName'], port: appConfiguration.MqttProps['Port'], path: '/mqtt'};


  return mqttopt;

}



const routes: Routes = [
  {path: 'contactmanager', loadChildren: './contactmanager/contactmanager.module#ContactmanagerModule'},
  {path: 'demo', loadChildren: './demo/demo.module#DemoModule'},
  {path: '**', redirectTo: 'contactmanager'}
];

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    MqttModule.forRoot(MqttServiceOptionsConf()),
    BrowserAnimationsModule,
    RouterModule.forRoot(routes),
    MatGridListModule,
    MatCardModule,
    MatMenuModule,
    MatIconModule,
    MatButtonModule,
    LayoutModule,
  ],
  providers: [DatePipe,
    AppConfigService,
    {
      provide: APP_INITIALIZER,
      useFactory: initializeApp,
      deps: [AppConfigService], multi: true
    },
  ],
  bootstrap: [AppComponent]
})
export class AppModule {


}

相关部分在函数 initializeApp、MqttServiceOptionsConf 和 imports 中,当我尝试加载 MqttModule 时,以及在我加载配置文件时在提供程序中。

任何想法我该如何解决这个问题?

标签: configurationangular6

解决方案


推荐阅读