J'ai réussi à le faire fonctionner en m'abonnant aux changements sur le routeur, en vérifiant que l'itinéraire avait effectivement changé (je recevais parfois plusieurs événements sur certains itinéraires), puis en envoyant le nouveau chemin à 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')
});
}
}
}
Vous devez également inclure le code de google analytics dans votre fichier d'index principal avant de charger votre application angular2 afin que le code global de google analytics soit activé. ga
existe, mais vous ne voulez pas envoyer la vue initiale deux fois. Pour ce faire, supprimez la ligne suivante du script de GA
index.html
<script>
(function(i,s,o,g,r,a,m){...})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X', 'auto');
// Remove this line to avoid sending the first page view twice.
//ga('send', 'pageview');
</script>
<!--
Load your ng2 app after ga.
This style of deferred script loading doesn't guarantee this will happen
but you can use Promise's or what works for your particular project.
-->
<script defer type="text/javascript" src="/app.js"></script>
Utilisation d'une bibliothèque tierce
Comme alternative à l'implémentation de GA par vous-même, la bibliothèque Angulartics2 est également un outil populaire pour la mise en œuvre du suivi GA et s'intègre également à d'autres fournisseurs d'analyses.