angular - Datalayer.push 与 Angular 6 中的 Typescript
问题描述
当我点击按钮时,我应该发送到数据层信息,但我不知道该怎么做,因为我使用的是 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'] || {};
}
解决方案
您可以在您dataLayer
的组件/服务等之上声明具有属性的全局 Window 接口,如下所示:
// Declare gTM dataLayer array.
declare global {
interface Window { dataLayer: any[]; }
}
然后只需在组件的代码中使用该属性而不会出现任何错误。
推荐阅读
- javascript - 如何在 HTML 属性中使用 EJS?
- c - K&R c book check argv 属性
- flutter - 为什么我的 CupertinoScrollbar 没有显示在颤动中
- html - 将 id 添加到 li 列表中
- python - ModuleNotFoundError 没有名为 deepvoice 的模块
- excel - 如何每 A4 打印 2 张发票,每张 3000 行加上从 excel 表中提取的行
- jsp - 仅在不满足 JSP 文件中包含某个用户的情况下才显示来自 SQL 数据库的数据
- clang - 使用调试编译的 LLVM ir ll 代码 - 如何获取行号
- javascript - 为 PHP 中公共文件夹之外的 .js 和 .css 文件提供服务
- c# - C# Linq InvalidOperationException