Angularjs 谷歌分析中的用户界面路由器状态变化跟踪

Angularjs 谷歌分析中的用户界面路由器状态变化跟踪,angularjs,google-analytics,angular-ui-router,Angularjs,Google Analytics,Angular Ui Router,我有一个使用UI路由器的AngularJS应用程序。虽然位置路径几乎始终保持为根(“/”),但状态经常发生更改。我想跟踪Google Analytics中的状态变化,利用您可以在页面视图中使用的所有功能。标准方法是在发生状态更改时发送pageview事件,如下所示: 问题是,对于大多数交互,我的应用程序的$location.path()将是“/”。URL很少更改。我是Google Analytics非开发人员方面的新手,我担心这会使报告不如其他方面那么健壮 据我所知,我的选择是: 发送状态名

我有一个使用UI路由器的AngularJS应用程序。虽然位置路径几乎始终保持为根(“/”),但状态经常发生更改。我想跟踪Google Analytics中的状态变化,利用您可以在页面视图中使用的所有功能。标准方法是在发生状态更改时发送pageview事件,如下所示:

问题是,对于大多数交互,我的应用程序的$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});
    

在这种情况下有经验的人能告诉我前进的正确方法吗

编辑

根据公认答案的建议,我最终创建了一个具有以下两个功能的服务(以及其他功能)


在过去,我所做的是将状态或路由更改等更改视为“页面”视图。其背后的原因是,我们可以更有效地在谷歌分析领域进行跟踪和游戏。这是因为GA最初是围绕基于页面的组件构建的。您要做的实际上是使用
ga.set
绑定,然后推送页面视图或正在发送的任何事件。通过这样做,您现在可以保留GA中的所有关联项。这使您的代码如下所示:

$rootScope.$on("$stateChangeSuccess", function(event, toState, toParams, fromState, fromParams) {
    $window.ga('set',{page:$location.path() + toState.name.replace(/\./g, '/'), title:toState.name});
    $window.ga('send', 'pageview');
    //any other events to send. They're now all going to be associated 
    //with this state until there is another navigation
});

我看你的第一个选择没有问题。真的没有合适的方法。但要确保这是一个全球性的替换
toState.name.replace(/\./g,“/”)
谢谢。选项1的缺点是任何url参数都会丢失,因为它们不在状态名称中表示。例如:URL/products/123可能会激活route products.description,但我们看不到正在访问的产品。所以,我倾向于选择2,使用自定义尺寸。啊。实际上,您使用的是位置路径和状态名称的组合。那很有趣,是的。原因是,在与GA合作时,您需要关注如何管理您的报告。通过进行标题/页面映射,您可以在应用程序中与站点的其他部分进行交互,并实际结合功能。
$rootScope.$on("$stateChangeSuccess", function(event, toState, toParams, fromState, fromParams) {
    $window.ga('set',{page:$location.path() + toState.name.replace(/\./g, '/'), title:toState.name});
    $window.ga('send', 'pageview');
    //any other events to send. They're now all going to be associated 
    //with this state until there is another navigation
});