Tracking Google Analytics Page Views in Angular2

前端 未结 6 1777
一个人的身影
一个人的身影 2020-12-04 11:16

I have built a new site using Angular 2 as the front-end. As everything is done via push state, there are no page loads which typically trigger the Google Analytics code to

6条回答
  •  伪装坚强ぢ
    2020-12-04 11:54

    I managed to get this working by subscribing to changes on the router, checking that the route had actually changed (I was getting multiple events on some routes at times) and then sending the new path to Google.

    app.component.ts

    import { ... } from '...';
    
    // Declare ga function as ambient
    declare var ga:Function;
    
    @Component({ ... })
    
    export class AppComponent {
        private currentRoute:string;
    
        constructor(_router:Router) {
            // Using Rx's built in `distinctUntilChanged ` feature to handle url change c/o @dloomb's answer
            router.events.distinctUntilChanged((previous: any, current: any) => {
                // Subscribe to any `NavigationEnd` events where the url has changed
                if(current instanceof NavigationEnd) {
                    return previous.url === current.url;
                }
                return true;
            }).subscribe((x: any) => {
                ga('set', 'page', x.url);
                ga('send', 'pageview')
            });
          }
        }
    }
    

    You also need to include the google analytics code in your main index file before loading your angular2 app so that the global ga object exists, but you don't want to send the initial view twice. In order to do this, remove the following line from the GA script

    index.html

    
    
    
    

    Using a third party library

    As an alternative to implementing GA yourself, the library Angulartics2 is also a popular tool for implementing GA tracking and also integrates with other analytics vendors as well.

提交回复
热议问题