【问题标题】:Datalayer.push with Typescript in Angular 6Datalayer.push 与 Angular 6 中的 Typescript
【发布时间】:2018-10-09 13:10:56
【问题描述】:

当我点击按钮时,我应该发送到数据层信息,但我不知道该怎么做,因为我使用的是 Angular 6,所以我需要使用 Typescript 和 window.dataLayer.push 不工作和给我这个错误

表格

<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'] || {};
      }

【问题讨论】:

  • 究竟是什么不起作用?你得到一个编译错误?运行时错误?数组中没有显示任何内容吗?
  • 改变了我的问题
  • @SiddAjmera 有正确的想法。本质上,您应该将属性“dataLayer”定义为窗口对象的一部分。或者将窗口对象强制转换为“any”以消除错误。

标签: angular typescript data-layers


【解决方案1】:

您可以在组件/服务等之上使用dataLayer 属性声明全局窗口接口,如下所示:

// Declare gTM dataLayer array.
declare global {
  interface Window { dataLayer: any[]; }
}

然后在组件的代码中使用该属性而不会出现任何错误。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多