在应用程序中使用matomo并希望将动态参数传递给Angular中的Matomodule.forRoot方法。获取动态配置资产

问题描述 投票:0回答:1

嗨,我遇到了问题,

使用 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
承诺解决之前初始化的。

javascript angular module app-initializer
1个回答
0
投票

相关答案:如何在 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),
],
© www.soinside.com 2019 - 2024. All rights reserved.