Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用户选择退出/基于cookie策略时停用Angular应用程序中的Gtag_Angular_Google Analytics_Gtag.js - Fatal编程技术网

在用户选择退出/基于cookie策略时停用Angular应用程序中的Gtag

在用户选择退出/基于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)){

我实现了一个带有跟踪cookie设置的cookie策略横幅。因此,在下一步中,我需要决定在运行时是否“使用”google analytics(gtag)

Google建议停用gtag,并在window对象()中添加属性

在浏览web时,会有很多关于如何访问窗口对象的讨论,因为它可能会导致问题,例如在服务器端渲染期间。但使用工厂和大量代码的解决方案似乎对我的小问题有很大帮助:

我现在主要想做的是:

  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;
      }