我想在项目中使用从文件加载的某个配置导入模块,可以在运行时修改配置文件,并在刷新浏览器时加载应用程序。
我现在正在做的是在“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);
}
答案 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 :(