AngularJS和分析 - 分离关注点

时间:2014-09-08 16:16:32

标签: angularjs separation-of-concerns web-analytics adobe-analytics

请考虑以下事项:Web应用程序的每个页面上的多个(手动引导的)AngularJS应用程序。需要将Web分析跟踪(在本例中为Adobe Omniture / SiteCatalyst)添加到每个应用程序中。但是,我希望将分析代码与AngularJS应用程序的其余部分完全分开 - 能够立刻将其删除。

最好的解决方法是什么?我考虑过以下几点:

  • 编写JQuery代码以询问DOM并提交SiteCatalyst调用(将起作用,但不是非常AngularJS-ey)
  • 找到一些扩展AngularJS控制器和使用额外分析代码包装方法的方法。这可能还涉及为范围变量添加$ watch代码。
  • 拦截AngularJS事件的其他方式,类似于HTTP拦截器可以做的事情。

1 个答案:

答案 0 :(得分:4)

这就是我要做的事情:

1)在应用程序的根目录定义一个名为:" AnalyticsCatcherController" (或类似的东西),该控制器将负责捕获您想要跟踪的所有事件,如下所示:

  .controller('AnalyticsCatcherController', ['$scope', function($scope) {
    $scope.$on('HitMainLink', function() {
      ...
    });
    $scope.$on('FbSharedClick', function() {
      ...
    });
  }]);

2)然后你只需$emit your custom events来自指令的行为,例如:$emit('FbSharedClick')

通过这种方式,如果您想要删除分析,您只需要摆脱" AnalyticsCatcherController"。如果您想使用其他跟踪系统:所有逻辑都在" AnalyticsCatcherController"中,与您的应用程序逻辑完全分开。确实,即使你移除了控制器,这些事件仍然会发出,那又怎样呢?它们不会产生任何真正的性能影响,更多:您可能将这些事件用于其他目的,因此您不必将它们视为Google Analytics跟踪系统的一部分。