嗨,我遇到了问题,
使用 Matomo 进行分析,并在
app.module.ts
配置中需要如下所示 -
MatomoModule.forRoot(
{
peop1: value1,
peop1: value2,
peop1: value3,
})
此外,我还在 Angular 应用程序启动之前从 asset 中获取
config.json
。
现在的问题是
value1
,value2
和 value3
应该来自 config.json
,但在 Promise 得到解析之前,app.module 外部模块已初始化。
在这种情况下如何将动态值传递给 forRoot 方法。
尝试过
APP_INIT
提供程序,但导入模块是在 APP_INIT
承诺解决之前初始化的。
相关答案:如何在 Angular 模块中的 forRoot 中注入配置
定义一个空的 const,它将由
APP_INITIALIZER
填充,您还可以定义配置可以在此处使用的默认属性!
export let MatomoModuleConfig: any = {};
然后您可以将配置设置在
platformBrowserDynamic
部分上方,或者在自定义 useFactory
内设置为此 const 变量
方法1
fetch('./config/config.json') // code from my previous answer, but hope this approach solves your issue
.then((resp) => resp.json())
.then((config) => {
MatomoModuleConfig.peop1 = config.peop1;
MatomoModuleConfig.peop2 = config.peop2;
MatomoModuleConfig.peop3 = config.peop3;
platformBrowserDynamic([{ provide: APP_CONFIG, useValue: config }])
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
});
方法2
providers: [
{
provide: APP_INITIALIZER,
useFactory: (config: AppConfig) => {
return () => {
MatomoModuleConfig.peop1 = config.peop1;
MatomoModuleConfig.peop2 = config.peop2;
MatomoModuleConfig.peop3 = config.peop3;
return new Promise(resolve => {
resolve();
});
}
},
multi: true,
deps: [APP_CONFIG],
},
]
最后,将此变量连接到
forRoot
imports: [
MatomoModule.forRoot(MatomoModuleConfig),
],