Angular 5 - 动态模块配置

时间:2017-12-22 09:16:36

标签: angular angular5 angular-aot

我想在项目中使用从文件加载的某个配置导入模块,可以在运行时修改配置文件,并在刷新浏览器时加载应用程序。

我现在正在做的是在“forRoot”方法中将配置文件路径发送到模块,并为配置提供指向“加载”方法的“useFactory”,这种“加载”方法只是使用一个HTTP GET来检索我的配置文件。在执行“ng build --prod --build-optimizer”之前,所有内容似乎都在使用“ng build”工作正常,这导致“错误地遇到静态解析符号值”。

我认为其原因是因为我在静态“forRoot”方法中使用了“useFactory”的提供程序,而“useFactory”指向非静态方法。怎么可能处理这个?这是一个好方法吗?

这就是我的'forRoot'方法和'initConfig'方法的样子:

export class JwtSecurityModule {
   public static forRoot(configPath:string) {
      return {
         ngModule: JwtSecurityModule,
         providers: [
            AppConfig,
            {
               provide: APP_INITIALIZER,
               useFactory: initConfig,
               deps: [AppConfig, configPath],
               multi: true
            }
         ]
      };
   }
   ...
}
...
export function initConfig(config:AppConfig, configPath: string) {
   return () => config.load(configPath);
}   

1 个答案:

答案 0 :(得分:1)

export function initConfig(config:AppConfig, configPath: string) {
  return (): Promise<any> => {
    return new Promise((resolve, reject) => {
      config.load(configPath)
      resolve();
    });
  };
}

据我所知,你需要在那里归还一个承诺。

也许,Angular 5目前没有运行我的APP_INITIALIZER :(