这是我的dataLayer数组:
dataLayer = [{ 'giftBatch' : { 'giftID': '', 'giftAmount': 0, 'giftCount': 0, 'giftUpdate': { 'giftPhase': 'Gift Empty' } }, 'txBatch': { 'txID': '', 'txTotal': 0, 'txURL': window.location.href, 'txUpdate': { 'txPhase': 'Transaction Opened', 'txT0': new Date(), 'txT1': '' 'txT2': '' } } }];
控制台结果为:Array [Object1]
根据需要,Object1包含“ giftBatch”和“ txBatch”对象。
我有一个触发器,稍后触发以更新dataLayer中的对象。
例如,将“ giftAmount”更新为50,将“ giftCount”更新为1。
我尝试了以下方法(我仅展示了一次修改“一个对象”的失败尝试),
尝试1:
dataLayer.push({giftAmount : 50});
结果:
数组[object1,object2]
Object1与上面相同,
Object2是一个新对象,其属性为'Gift Amount':50,
尝试2:
dataLayer.push({giftBatch.giftAmount: 222});
结果: SyntaxError:缺少:属性ID之后
尝试3:
dataLayer.push({'giftBatch.giftAmount' : 50});
结果:
数组[object1,object2]
Object1与上面相同,
Object2是一个具有'giftBatch.giftAmount'属性的新对象:50
我在这里做错了什么?
根据此处的dataLayer部分:https : //support.google.com/tagmanager/answer/6106899?hl= zh-CN
我应该能够编辑嵌套对象的值。
PS。这就是我现在正在使用的,并且确实有效。但是,为什么不推动工作呢?
dataLayer[index].giftBatch.giftAmount = 50;
其中index是Object2的索引。
任何帮助都会很棒。
谢谢。
不好的做法是编辑dataLayer的现有内容,但是您只需要发送覆盖属性值,如下所示:
dataLayer.push({'giftBatch':{'giftAmount' : 50}});
标记管理器最晚启动,Object
并且将继续向后浏览先前的Objects,以确定每个DataLayer变量的当前设置,因此只有giftBatch.giftAmount
此新推送才能覆盖它。
这是预览调试器的示例,显示了新test
Object 的dataLayer合并视图以及以前消息中的属性:
在这种情况下,先前的消息(#4和/或#5)至少推送了:
{test:{test:8}} // #6 does not contain test.test so it is from earlier
或他们最多可以推动:
{test:{test:..,foo:..,test3:..}} // #4 if it's been completely shadowed {test:{test:8,foo:..,test3:..}} // #5 if it has test.test, must have 8
没有标签可以像Messages
缺少event
属性的对象一样在#3和#7之间触发,因此,当跟踪可能随后发生在事件#7上触发的标签上发生跟踪时,应将#4&#5的任何阴影值视为不可访问。