Tracking Google Analytics Page Views with AngularJS

前端 未结 21 826
北恋
北恋 2020-11-27 09:14

I\'m setting up a new app using AngularJS as the frontend. Everything on the client side is done with HTML5 pushstate and I\'d like to be able to track my page views in Goog

相关标签:
21条回答
  • 2020-11-27 09:26

    If you're using ui-router you can subscribe to the $stateChangeSuccess event like this:

    $rootScope.$on('$stateChangeSuccess', function (event) {
        $window.ga('send', 'pageview', $location.path());
    });
    

    For a complete working example see this blog post

    0 讨论(0)
  • 2020-11-27 09:27

    I suggest using the Segment analytics library and following our Angular quickstart guide. You’ll be able to track page visits and track user behavior actions with a single API. If you have an SPA, you can allow the RouterOutlet component to handle when the page renders and use ngOnInit to invoke page calls. The example below shows one way you could do this:

    @Component({
      selector: 'app-home',
      templateUrl: './home.component.html',
      styleUrls: ['./home.component.css']
    })
    export class HomeComponent implements OnInit {
      ngOnInit() {
        window.analytics.page('Home');
      }
    }
    

    I’m the maintainer of https://github.com/segmentio/analytics-angular. With Segment, you’ll be able to switch different destinations on-and-off by the flip of a switch if you are interested in trying multiple analytics tools (we support over 250+ destinations) without having to write any additional code.

    0 讨论(0)
  • 2020-11-27 09:28

    I am using ui-router and my code looks like this:

    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams){
      /* Google analytics */
      var path = toState.url;
      for(var i in toParams){
        path = path.replace(':' + i, toParams[i]);
      }
      /* global ga */
      ga('send', 'pageview', path);
    });
    

    This way I can track different states. Maybe someone will find it usefull.

    0 讨论(0)
  • 2020-11-27 09:33

    The best way to do this is using Google Tag Manager to fire your Google Analytics tags based on history listeners. These are built in to the GTM interface and easily allow tracking on client side HTML5 interactions .

    Enable the built in History variables and create a trigger to fire an event based on history changes.

    0 讨论(0)
  • 2020-11-27 09:34

    When a new view is loaded in AngularJS, Google Analytics does not count it as a new page load. Fortunately there is a way to manually tell GA to log a url as a new pageview.

    _gaq.push(['_trackPageview', '<url>']); would do the job, but how to bind that with AngularJS?

    Here is a service which you could use:

    (function(angular) { 
    
      angular.module('analytics', ['ng']).service('analytics', [
        '$rootScope', '$window', '$location', function($rootScope, $window, $location) {
          var track = function() {
            $window._gaq.push(['_trackPageview', $location.path()]);
          };
          $rootScope.$on('$viewContentLoaded', track);
        }
      ]);
    
    }(window.angular));
    

    When you define your angular module, include the analytics module like so:

    angular.module('myappname', ['analytics']);
    

    UPDATE:

    You should use the new Universal Google Analytics tracking code with:

    $window.ga('send', 'pageview', {page: $location.url()});
    
    0 讨论(0)
  • 2020-11-27 09:36
    app.run(function ($rootScope, $location) {
        $rootScope.$on('$routeChangeSuccess', function(){
            ga('send', 'pageview', $location.path());
        });
    });
    
    0 讨论(0)
提交回复
热议问题