【发布时间】:2015-08-31 18:05:39
【问题描述】:
我有一个使用 UI 路由器的 AngularJS 应用程序。尽管位置路径几乎总是保持为根('/'),但状态变化频繁。我想跟踪 Google Analytics 中的状态变化,使用您可以在页面视图中使用的所有功能。标准方法是在发生状态更改时发送浏览量事件,如下所示:
ui-router getting current path on state change for google analytics
问题在于,对于大多数交互,我的应用程序的 $location.path() 将是“/”。 URL 很少更改。我是 Google Analytics(分析)的非开发人员方面的新手,我担心这会导致报告不如其他情况下那么可靠。
据我所知,我的选择是:
发送州名来代替 $location.path(),或许可以转换 '.'分隔符变成'/'。
$window.ga('send', 'pageview', { page: '/' + toState.name.replace(/\./g, '/') });发送一个大部分多余的 $location.path()(几乎总是'/'),并将状态名称放入其他属性中。
$window.ga('send', 'pageview', { page: $location.path(), someOtherAttribute: toState.name });
在这种情况下有经验的人可以建议我前进的正确方法吗?
编辑
从接受的答案中获得建议,我最终创建了一个具有以下两个功能(以及其他功能)的服务
var convertPageName = function(path,stateName){
var ret = path;
if(stateName) {
ret = ret + ':' + stateName.replace(/\./g, '/');
}
return ret;
};
var callPageView = function(stateName) {
var payload;
if(undefined !== stateName) {
payload = {page:convertPageName($location.path(),stateName), title: stateName};
}
else {
payload = {page: $location.path};
}
$window.ga('set', payload);
$window.ga('send', 'pageview');
};
【问题讨论】:
-
我认为您的第一个选项没有问题。确实没有合适的方法。确保这是一个全局替换。
toState.name.replace(/\./g, '/') -
谢谢。相应地进行了编辑。
-
选项 1 的缺点是任何 url 参数都会丢失,因为它们不在状态名称中表示。例如:URL /products/123 可能会激活路由 products.description,但我们看不到正在访问的产品。所以,我倾向于选项 2,使用自定义尺寸。
标签: angularjs google-analytics angular-ui-router