Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.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
Html 如何在Angular2中实施谷歌分析?_Html_Angular_Typescript_Google Analytics - Fatal编程技术网

Html 如何在Angular2中实施谷歌分析?

Html 如何在Angular2中实施谷歌分析?,html,angular,typescript,google-analytics,Html,Angular,Typescript,Google Analytics,我在尝试在angular2中实现谷歌分析时遇到了一个问题。 根据我找到的信息,作为例子,这似乎很容易。但到目前为止,我还没有找到任何不是从.html而是从.ts的例子 我正在尝试用google analytics创建一个私有方法,然后在构造函数中调用它。差不多吧 constructor() { this.initializeAnalytics(); } private initializeAnalytics() { (function (i, s, o, g, r, a, m) {

我在尝试在angular2中实现谷歌分析时遇到了一个问题。 根据我找到的信息,作为例子,这似乎很容易。但到目前为止,我还没有找到任何不是从
.html
而是从
.ts
的例子

我正在尝试用google analytics创建一个私有方法,然后在构造函数中调用它。差不多吧

constructor() {
  this.initializeAnalytics();
}

private initializeAnalytics() {
    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r;
        i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date();
        a = s.createElement(o),
                m = s.getElementsByTagName(o)[0];
        a.async = 1;
        a.src = g;
        m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

    ...
    ...
}
但是仅仅放置google analytics代码是不起作用的(错误:
提供的参数与调用目标的任何签名都不匹配)。我可能做得不对

我怎样才能做到这一点?

我就是这样做到的

您需要将ga代码放入index.html中。 (不要忘记注释以下行:
/ga('send','pageview');)

然后,在导入之后,需要将ga函数声明到app.component.ts文件中:

import { ... } ...;

declare var ga:Function;

@component(...)
然后,您可以在app.component.ts中订阅路由更改事件,并按如下方式发送ga数据:

this.router.events.subscribe((event:Event) => {
    // Send GA tracking on NavigationEnd event. You may wish to add other 
    // logic here too or change which event to work with
    if (event instanceof NavigationEnd) {
        // When the route is '/', location.path actually returns ''.
        let newRoute = this.location.path() || '/';
        // If the route has changed, send the new route to analytics.
        if (this.currentRoute != newRoute) {
            ga('send', 'pageview', newRoute);
            //console.log('would send to ga: ' + newRoute);
            this.currentRoute = newRoute;
        }
    }
});

您需要将代码转换为Typescript。目前它是Javascript。功能在

function (i, s, o, g, r, a, m)
有7个非可选参数,但此行中仅提供5个:

(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga')
您需要将其余参数设置为可选参数,如下所示:

function (i, s, o, g, r, a?, m?)
然后,您还需要从以下位置更改另一行:

}, i[r].l = 1 * new Date();

},i[r].l=1*新日期();
最终代码可能如下所示:

(function (i, s, o, g, r, a?, m?) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * <any>new Date();
    a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
(功能(i、s、o、g、r、a、m){
i['GoogleAnalyticsObject']=r;
i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)
},i[r].l=1*新日期();
a=s.createElement(o),
m=s.getElementsByTagName(o)[0];
a、 异步=1;
a、 src=g;
m、 parentNode.insertBefore(a,m)
})(窗口,文档,“脚本”,“www.google-analytics.com/analytics.js”,“ga”);

谢谢您的回答,但这与我发现的完全相同(查看链接url),我得到了类似于
window.dataLayer=window.dataLayer | |[]的代码;函数gtag(){dataLayer.push(arguments);}gtag('js',new Date())不同于
ga('send','pageview');)用于index.html。你要哪一个use@ThilakRaj原始代码在这里可用。看起来他们用新的东西更新了代码。我还不知道如何实现它。请检查一下。
(function (i, s, o, g, r, a?, m?) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * <any>new Date();
    a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');