如何更新 dataLayer 变量?

8
我们最初将包含变量的对象推送到数据层(dataLayer):
dataLayer.push({
    'environment': {
        'userName': 'abc',
        'id': 123,
        'clicks': 0
    }
});

我们现在希望每当用户点击时,增加environment.clicks的值。如何实现呢?当我们通过以下方式进行推送时:
dataLayer.push({
    'environment': {
        'clicks': 123
    }
});

数据层数组可能会有成千上万的条目。如何正确更新变量?
3个回答

9
更新数据层变量的方法是推送变量,可以在“本地”GTM事件发生时或自定义事件旁边进行。因此,基本上你做得对了。
至于您担心DL可能会获得太多条目 - 无论如何,每次点击都会为dataLayer获取一个新条目(GTM自己添加),因此对于您的变量的额外条目可能并不那么重要。
如果您仍然想避免这种情况,可以更新全局JavaScript变量并在GTM中使用它。Google Tag Manager可以访问您页面上的所有变量(您仍将收到dataLayer中的所有单击事件)。
dataLayer还具有一个set方法,允许您直接写入Datalayer,这显然就是您要寻找的内容。您需要获得您的GTM实例,然后可以设置值:
 var gtm = window.google_tag_manager[{{Container ID}}];
     gtm.dataLayer.set('balloonsPopped', undefined);

具体细节可以参考Bounteous文章。你可以在自定义HTML标签中使用它,在单击事件触发标签之前更新单击计数。

此外,dataLayer在页面加载时会重置。除非单页应用收集了成千上万的点击量,否则无法达到10,000次每个页面浏览次数。

这是标记为Google Analytics。如果您计划在GA中跟踪点击,则请记住,GA会话在500次点击后过期,因此结果可能不如您所期望(免费版本每月只有1000万次点击,点击跟踪将很快耗尽)。如果您想在GA中跟踪点击次数,则需要使用事件或其他内容来跟踪点击,因此事件数量基本上就是您要查找的指标,或者您可以创建一个自定义指标并在GA调用中将其设置为“1”(表示每次调用都会增加1)。


6
引用自文档

需要注意的是,向数据层推送与现有变量同名的变量将导致新值覆盖现有值。

只需推送具有相同变量名称和更新值的条目即可。

这是真正的答案,尽管了解“set”方法也很好 :) - Nuriel
引用TFM,加一分。 - derekbaker783

-1

你不能使用一个占位符吗?像这样:

var click_value_holder = dataLayer.environment.clicks;
dataLayer.push({
  'environment': {
    'clicks': (click_value_holder + 1)
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接