我正在使用Angular4并尝试安装分析。 我遵循了这个指南:
https://blog.thecodecampus.de/angular-2-include-google-analytics-event-tracking/
但是当我尝试构建我的项目时,我收到错误:
错误TS2304:找不到名称'ga'。
我已经检查了我的package.json,并且在 devDependencies 中安装了"@types/google.analytics": "0.0.38",
。
当我开始输入时,我可以看到intellisense知道它是UniversalAnalytics.ga
类型,但我无法让它工作。
我尝试将代码更改为:
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
let ga: Function;
ga('set', 'page', event.urlAfterRedirects);
ga('send', 'pageview');
}
});
它编译,但在console.log中我得到一个错误说明:
未捕获(承诺):TypeError:ga不是函数
如果我改为:
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
let ga: any;
ga('set', 'page', event.urlAfterRedirects);
ga('send', 'pageview');
}
});
我得到了同样的错误。 有谁知道为什么?
以下是完整的代码:
import { Component, OnInit, AfterViewChecked, AfterViewInit } from "@angular/core";
import { ActivatedRoute, Params, Router, NavigationEnd } from "@angular/router";
import { ResultsService } from "./shared/results.service";
import { HeightService } from "./shared/height.service";
@Component({
selector: 'bzRoot',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, AfterViewChecked, AfterViewInit {
constructor(
private _activatedRoute: ActivatedRoute,
private _resultsService: ResultsService,
private _heightService: HeightService,
public router: Router) {
}
ngOnInit() {
this._activatedRoute.queryParams.subscribe((params: Params) => {
// Only update the elq if it changes (remember: changing a parameter causes the page to refresh)
var elq = params['elqid'];
if (elq) {
this._resultsService.elq = elq;
}
});
}
ngAfterViewChecked() {
this._heightService.resize();
}
ngAfterViewInit() {
//this.router.events.subscribe(event => {
// if (event instanceof NavigationEnd) {
// let ga: Function;
// ga('set', 'page', event.urlAfterRedirects);
// ga('send', 'pageview');
// }
//});
}
}
答案 0 :(得分:3)
我找到了做声明的替代方法。我修改了我的代码:
this._router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
(<any>window).ga('set', 'page', event.urlAfterRedirects);
(<any>window).ga('send', 'pageview');
}
});
它有效。 我在另一个指令中找到了这个方法。
答案 1 :(得分:2)
不知何故@ types / google.analytics包接缝被破坏了。只需将其添加到您的代码中:
chart.addSeries({
type: 'column',
yAxis: 1,
data: cols,
zIndex: 9999,
minPointLength: 10,
threshold: -0.1,
pointPadding: 0,
pointRange: 0,
groupPadding: 0,
showInLegend: false,
tooltip: {
pointFormat: false
},
states: {
hover: {
enabled: false
}
}
});
chart.addSeries({
name: "Study Days",
data: data,
maxPointWidth: 30,
point: {
events: {
click: function() {
if (url != "")
window.open(url,'_blank');
}
}
}
});
我会更新我的博文。
答案 2 :(得分:0)
此外,您可以完全避免打字稿类型检查:
window['ga']('set', 'page', event.urlAfterRedirects);
window['ga']('send', 'pageview');
答案 3 :(得分:0)
您可以将google.analytics
添加到tsconfig.json中的类型
"types": [
"node",
"google.analytics",
],
..或者您可以从配置中删除整个types
属性,以使其全部使用@types。
在此处检查“类型”部分:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
答案 4 :(得分:0)
我最近遇到了这个问题,并且解决了为Google Analytics(分析)@types/google.analytics添加类型定义包的问题。
因此,如果您需要处理一些流行的api,这些api公开一些全局变量,例如(谷歌分析,lodash,jquery等。),请在npmjs上查找类型定义。如果找不到,则可以创建自己的declaration file