typescript - Google Analytics: dataLayer.push nu funcționează cu un array de variabile?


Mă întreb de ce gtag.js nu funcționează când se împinge în array-ul dataLayer un set de variabile în loc de 'arguments'? Iată un exemplu de cod:

window.dataLayer = window.dataLayer || []

function gtag(first: any, second: any) {
    window.dataLayer.push([first, second])
}

gtag('js', new Date())
gtag('config', trackingCode)

Acest lucru funcționează doar atunci când înlocuiesc '[first, second]' cu 'arguments'

Răspuns #1

Așadar, la final, această versiune a codului funcționează bine pentru mine, fără erori de linter:

window.dataLayer = window.dataLayer || []

function gtag(..._args: unknown[]) {
    window.dataLayer.push(arguments)
}

gtag('js', new Date())
gtag('config', trackingCode)

Răspunsul #2

Nu știm ce încerci să realizezi prin rescrierea funcției gtag, așa că nu putem răspunde la întrebarea specifică despre ce "funcționează" și ce nu.

Ce se poate spune: arguments este un Obiect și GTM se așteaptă la un obiect de la dataLayer.push, de aceea acest lucru urmează designul intenționat (în timp ce [first, second] este un Array și, prin urmare, nu urmează).

Rețineți că apelul push în sine „funcționează”:

Totuși, nu vei putea citi acele date prin GTM, care, așa cum s-a explicat mai sus, se așteaptă ca .push să transmită Obiecte.

Dacă vrei să folosești dataLayer complet gratuit, poți folosi ajutorul dataLayer de la GTM:
https://github.com/google/data-layer-helper

Acest lucru suportă sintaxa matricei prin comenzi Meta:

dataLayer.push(['abc.push', 4, 5, 6]);

Totuși, GTM, în mod implicit, nu suportă citirea acestor date (din nou, GTM așteaptă un Obiect pentru a putea extrage valori pe baza proprietăților obiectului), așa că pentru a citi aceste date prin GTM ar trebui să folosești ajutorul dataLayer în cadrul etichetelor și variabilelor GTM.