使用Typescript在Angular 6中进行Datalayer.push

13
当我点击按钮时,我应该将信息发送到数据层,但我不知道如何做,因为我正在使用Angular 6,所以我需要使用Typescript,而window.dataLayer.push无法正常工作并给出错误。

enter image description here

表单

<form>
            <div class="radio">
              <input value="Yes" id="radio-1" [(ngModel)]="answer" name="radio" type="radio">
              <label class="radio-label rob-l" for="radio-1">Yes</label>  
          </div>
          <div class="radio">
            <input value="No" id="radio-2" [(ngModel)]="answer" name="radio" type="radio">
            <label class="radio-label rob-l" for="radio-2">No</label>
          </div>
          </div>
        <div class="btn">
          <button (click)="Next()" type="submit">Next question</button>
        </div>
      </form>

我希望您能够收到类似的东西

Next(){
    if ((this.path == 1) && (this.answer === "Yes" || this.answer === "No"))
          {
            // window.dataLayer = window.dataLayer || [];
            // window.dataLayer.push({
            // 'event': 'answer',
            // 'answer': this.answer 
            // });
            this.path++;
            this.answer = "";
          }
}

通过这段代码解决了问题:

window['dataLayer'] = window['dataLayer'] || [];
        window['dataLayer'].push({
        'event': 'Answer',
        'failedText': this.answer 
        });
    ngOnInit() {
        window['dataLayer'] = window['dataLayer'] || {};
      }

具体是什么出了问题?你是否遇到编译错误?运行时错误?数组中没有显示任何内容吗? - Mathyn
修改了我的问题。 - Aleksey Dyomin
2
可能是如何在TypeScript中显式设置`window`上的新属性?的重复问题。 - SiddAjmera
1
@SiddAjmera 的想法是正确的。实质上,您应该将属性“dataLayer”定义为窗口对象的一部分。或者,将窗口对象转换为类型“any”以消除错误。 - Mathyn
2个回答

10
你可以在你的组件/服务等顶部声明带有 dataLayer 属性的全局 Window 接口,示例如下:
// Declare gTM dataLayer array.
declare global {
  interface Window { dataLayer: any[]; }
}

然后在组件代码中使用该属性,无需任何错误。


0
在你的 marketo-form.services.ts 文件中声明 window const,并在 submit 函数中使用它。
declare let MktoForms2: any;

declare const window: Window & { dataLayer: Record<string, unknown>[] };

form.onSubmit(function () {
            window.dataLayer.push({
              event: `form_fill_success_` + formId,
            });
          });

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