1

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

我现在正在做的是在“forRoot”方法中将配置文件路径发送到模块,并为配置提供指向“load”方法的“useFactory”,这个“load”方法只是使用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);
}   
4

1 回答 1

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

据我所知,你需要在那里返回一个 Promise。

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

于 2017-12-26T09:16:52.407 回答