Skip to content

Instantly share code, notes, and snippets.

@troex
Created September 1, 2017 16:30
Show Gist options
  • Save troex/46d6264d6cd8ae5a194095705b0870fb to your computer and use it in GitHub Desktop.
Save troex/46d6264d6cd8ae5a194095705b0870fb to your computer and use it in GitHub Desktop.
AngularJS Attribution Page tracking
angular.module('AttributionApp').run(['$rootScope', 'AnalyticsTracker', '$state', function($rootScope, AnalyticsTracker, $state) {
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
var toStateFragment = $state.href(toState, toParams);
var fromStateFragment = $state.href(fromState, fromParams);
var origin = window.location.origin;
var path = window.location.pathname;
// strip hash-bang from url
var pathWithParams = path + toStateFragment.replace(/^#!\//, '')
var properties = {
url: (origin + pathWithParams),
path: pathWithParams.replace(/\?.*/, ''),
search: (pathWithParams.match(/\?/) ? pathWithParams.replace(/(\?.*)$/, '$1') : '')
};
if (fromStateFragment) {
properties.referrer = origin + path + fromStateFragment.replace(/^#!\//, '');
}
// some pages are "named pages", e.g. instead of "Loaded a Page" these will be:
// "Viewed #{NAME} Page" and it will be possible to select these as conversion events
var pageName = null;
switch (toState.name) {
case 'onboarding':
pageName = 'Onboarding ' + _.capitalize(toParams.step || 'check');
break;
case 'signup':
pageName = 'Signup';
break;
}
// AnalyticsTracker is a wrapper around "Attribution" or "Segment"
AnalyticsTracker.page(pageName, properties);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment