在用户选择退出/基于cookie策略时停用Angular应用程序中的Gtag
我实现了一个带有跟踪cookie设置的cookie策略横幅。因此,在下一步中,我需要决定在运行时是否“使用”google analytics(gtag) Google建议停用gtag,并在window对象()中添加属性 在浏览web时,会有很多关于如何访问窗口对象的讨论,因为它可能会导致问题,例如在服务器端渲染期间。但使用工厂和大量代码的解决方案似乎对我的小问题有很大帮助: 我现在主要想做的是:在用户选择退出/基于cookie策略时停用Angular应用程序中的Gtag,angular,google-analytics,gtag.js,Angular,Google Analytics,Gtag.js,我实现了一个带有跟踪cookie设置的cookie策略横幅。因此,在下一步中,我需要决定在运行时是否“使用”google analytics(gtag) Google建议停用gtag,并在window对象()中添加属性 在浏览web时,会有很多关于如何访问窗口对象的讨论,因为它可能会导致问题,例如在服务器端渲染期间。但使用工厂和大量代码的解决方案似乎对我的小问题有很大帮助: 我现在主要想做的是: if (isPlatformBrowser(this.platformId)){
if (isPlatformBrowser(this.platformId)){
window['ga-disable-'+environment.GOOGLE_ANALYTICS_ID] = true;
}
这些解决方案是有效的,但我不确定这是否是一个“有效的解决方案”,请建议更好的方法我会将问题与服务分离,以便您可以有效地测试这一点,然后担心服务器端渲染和其他地方的窗口引用 我将通过创建一个自定义的可注入对象来实现这一点
导出界面谷歌设置{
‘ga-disable-ga_度量_ID’?:布尔值;
}
导出常量GOOGLE_设置:InjectionToken=新InjectionToken('GOOGLE_设置');
然后,您将在服务中使用该接口
@Injectable()
导出类谷歌服务{
公共构造函数(@Inject(谷歌设置)设置:谷歌设置){
设置['ga-disable-ga_测量_ID']=true;
}
}
现在,您只能通过引导应用程序的main.ts
文件将此自定义对象注入web浏览器
platformBrowserDynamic()
.bootstrapModule(AppModule{
供应商:[
{提供:GOOGLE_设置,useValue:window}
]
})
.catch(err=>console.error(err));
当您准备好进行服务器端渲染(SSR)时,将使用不同的引导函数,您可以提供不同的值(例如;{}
空对象)。对于窗口
类的SSR上的未知类型,将不会出现TypeScript编译器警告,因为您从未使用SSR引用它
if (isPlatformBrowser(this.platformId)){
window['ga-disable-'+environment.GOOGLE_ANALYTICS_ID] = true;
}