我正在构建Angular 6 SPA。使用Google Analytics(分析)时,我使用的是以下代码:
<script>
(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', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', 'XXXXXXX', 'auto'); //tracking code
在index.html
中
由于我想触发app.component.ts
中每个页面的分析,因此我有以下代码:
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
(window as any).ga("set", "page", event.urlAfterRedirects);
(window as any).ga("send", "pageview");
}
}
到目前为止,太好了。问题出在Google Tag Manager
上。这是index.html中的代码:
<script nonce="1234567890">
(function (w, d, s, l, i) {
w[l] = w[l] || []; w[l].push({
'gtm.start':
new Date().getTime(), event: 'gtm.js'
}); var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true;
j.nonce = "1234567890"; j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'XXXXXXXX');
</script>
当Angular引导时,以上仅运行once
。当Angular路由器导航到另一条路线时,我无法找到与上述方法类似的方法来使其再次运行。有什么想法吗?
答案 0 :(得分:0)
对于GTM和SPA,运行一次即可。 GTM中的基本“网页浏览”事件与实际的网页加载相对应,因此在SPA中仅触发一次。但是,您可以在GTM中使用GTM历史记录事件来触发SPA应用程序中的GA浏览量标记。 这是文档https://support.google.com/tagmanager/answer/7679322?hl=en