angular - 无法通过 Matomo/Piwik 跟踪 Angular 8 中的路线变化
问题描述
我遵循了 Matomo 文档(在放置东西以及如何实现它们方面并不是特别有用),并且我还尝试了使用ngx-Matomo的方法,但由于某种原因也不起作用。
我遇到的问题是我的初次访问被记录了,但是当我点击新的“页面”(路线)时,没有其他内容。唯一一次触发是刷新页面或重新加载本地主机或测试站点,但未跟踪正常导航。
由于配置文件限制,我目前无法访问 Matomo 本身内部的任何选项,但我想知道这是否是问题所在。
这是我的 ngx-matomo 代码和样板 Matomo 脚本(URL 和一些名称已更改以保护项目):
var _paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//MY_URL/";
_paq.push(['setTrackerUrl', u + 'piwik.php']);
_paq.push(['setSiteId', '000']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript'; g.async = true; g.defer = true; g.src = u + 'piwik.js'; s.parentNode.insertBefore(g, s);
})();
应用根目录:
import { Component, OnInit } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
import { MatomoInjector } from 'ngx-matomo';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
constructor(router: Router, private matomoInjector: MatomoInjector) {
this.matomoInjector.init('//MY_URL/', 000);
}
组件设置:
import { Component, OnInit } from '@angular/core';
import { ResourceLinksService } from './resource-links.service';
import { MatomoTracker } from 'ngx-matomo';
@Component({
selector: 'app-component',
templateUrl: './component.html',
styleUrls: ['.component.css']
})
export class Component implements OnInit{
constructor(private matomoTracker: MatomoTracker) {
}
ngOnInit() {
this.matomoTracker.setDocumentTitle('Title Test');
}
}
我的 app.module.ts 中也导入了这个 NPM
任何帮助都会很棒。我完全不知道为什么 ngx-matomo 不工作。这可能表明我正在使用的 Matomo 服务本身存在问题。
解决方案
在过去,我也尝试在 Angular 中实现 Matomo - 成功。这是我不使用外部 npm 包的解决方案:
第 1 步:创建一个 javascript 文件并输入以下代码
统计.js:
function statistic(path) {
(function () {
const u = "//MY_URL/";
// Remove the script added before
const d = document, g = d.createElement("script"), s = d.getElementsByTagName("script")[0];
const sSrc = s.getAttribute('src');
if (sSrc === u + "matomo.js") {
s.remove();
}
// Set variables
const _paq = window._paq = window._paq || [];
_paq.push(["disableCookies"]);
_paq.push(["setCustomUrl", path]);
_paq.push(["trackPageView"]);
(function () {
_paq.push(["setTrackerUrl", u + "matomo.php"]);
_paq.push(["setSiteId", "1"]);
const d = document, g = d.createElement("script"), s = d.getElementsByTagName("script")[0];
g.type = "text/javascript";
g.async = true;
g.src = u + "matomo.js";
s.parentNode.insertBefore(g, s);
})();
})();
}
将 MY_URL 替换为您的 url 或 matomo.js 的路径
第 2 步:编辑您的 angular.json(项目 > 您的项目名称 > 架构师 > 构建 > 选项)
"scripts": [
"path to/statistic.js"
]
第 3 步:编辑您的 app.component.ts 您放入包含的位置(在文件顶部)
import {NavigationEnd, Router} from '@angular/router';
declare const statistic: any;
statistic 是 statistic.js 中函数的名称
第 4 步:在 app.component.ts 中编辑您的构造函数
constructor(private router: Router) {
router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
statistic(window.location.pathname);
}
});
}
我希望这会有所帮助,因为对于 angular 的 matomo 没有有用的教程
推荐阅读
- java - 如何使用 jUnit 断言检查值是否在 Float 中?
- laravel - 按需挂载 Laravel 存储(连接到 FTP)
- ruby-on-rails - 有没有更好的方法来设计数据结构来存储每个商店的库存?
- mysql - 了解嵌套联接
- elasticsearch - kibana 7.2.1 地图可视化中缺少邮政编码
- font-awesome - 无法在我的工作文件中链接字体真棒文件
- c++ - imageLoad glsl 在计算着色器 OpenGL 4.3 中总是返回 0
- angular - scrollIntoView 函数调用需要角茉莉花测试用例
- jquery - 使用 jQuery 将多个元素添加到 flexbox 列中
- c - 在 C 中连接到服务器 TCP