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.
