Tracking Google Analytics Page Views with AngularJS

前端 未结 21 808
北恋
北恋 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:36

    For those of you using AngularUI Router instead of ngRoute can use the following code to track page views.

    app.run(function ($rootScope) {
        $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
            ga('set', 'page', toState.url);
            ga('send', 'pageview');
        });
    });
    
    0 讨论(0)
  • 2020-11-27 09:37

    If you're using ng-view in your Angular app you can listen for the $viewContentLoaded event and push a tracking event to Google Analytics.

    Assuming you've set up your tracking code in your main index.html file with a name of var _gaq and MyCtrl is what you've defined in the ng-controller directive.

    function MyCtrl($scope, $location, $window) {
      $scope.$on('$viewContentLoaded', function(event) {
        $window._gaq.push(['_trackPageView', $location.url()]);
      });
    }
    

    UPDATE: for new version of google-analytics use this one

    function MyCtrl($scope, $location, $window) {
      $scope.$on('$viewContentLoaded', function(event) {
        $window.ga('send', 'pageview', { page: $location.url() });
      });
    }
    
    0 讨论(0)
  • 2020-11-27 09:38

    I am using AngluarJS in html5 mode. I found following solution as most reliable:

    Use angular-google-analytics library. Initialize it with something like:

    //Do this in module that is always initialized on your webapp    
    angular.module('core').config(["AnalyticsProvider",
      function (AnalyticsProvider) {
        AnalyticsProvider.setAccount(YOUR_GOOGLE_ANALYTICS_TRACKING_CODE);
    
        //Ignoring first page load because of HTML5 route mode to ensure that page view is called only when you explicitly call for pageview event
        AnalyticsProvider.ignoreFirstPageLoad(true);
      }
    ]);
    

    After that, add listener on $stateChangeSuccess' and send trackPage event.

    angular.module('core').run(['$rootScope', '$location', 'Analytics', 
        function($rootScope, $location, Analytics) {
            $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams, options) {
                try {
                    Analytics.trackPage($location.url());
                }
                catch(err) {
                  //user browser is disabling tracking
                }
            });
        }
    ]);
    

    At any moment, when you have your user initalized you can inject Analytics there and make call:

    Analytics.set('&uid', user.id);
    
    0 讨论(0)
  • 2020-11-27 09:40

    Developers creating Single Page Applications can use autotrack, which includes a urlChangeTracker plugin that handles all of the important considerations listed in this guide for you. See the autotrack documentation for usage and installation instructions.

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

    I personally like to set up my analytics with the template URL instead of the current path. This is mainly because my application has many custom paths such as message/:id or profile/:id. If I were to send these paths, I'd have so many pages being viewed within analytics, it would be too difficult to check which page users are visiting most.

    $rootScope.$on('$viewContentLoaded', function(event) {
        $window.ga('send', 'pageview', {
            page: $route.current.templateUrl.replace("views", "")
        });
    });
    

    I now get clean page views within my analytics such as user-profile.html and message.html instead of many pages being profile/1, profile/2 and profile/3. I can now process reports to see how many people are viewing user profiles.

    If anyone has any objection to why this is bad practise within analytics, I would be more than happy to hear about it. Quite new to using Google Analytics, so not too sure if this is the best approach or not.

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

    I've created a service + filter that could help you guys with this, and maybe also with some other providers if you choose to add them in the future.

    Check out https://github.com/mgonto/angularytics and let me know how this works out for you.

    0 讨论(0)
提交回复
热议问题