Vendor-agnostic Analytics for Angular Applications. angulartics.github.io/ngx-analytics
- ngx-analytics
npm install ngx-analytics --save
- Add
NgxAnalyticsModule
to your root NgModule passing an array of providers to enable
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule, Routes } from '@angular/router';
import { NgxAnalyticsModule } from 'ngx-analytics';
import { NgxAnalyticsGoogleAnalytics } from 'ngx-analytics/ga';
const ROUTES: Routes = [
{ path: '', component: HomeComponent },
{ path: 'about', component: AboutComponent },
];
@NgModule({
imports: [
BrowserModule,
RouterModule.forRoot(ROUTES),
// added to imports
NgxAnalyticsModule.forRoot([NgxAnalyticsGoogleAnalytics]),
],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
- Required: Import your providers in the root component. This starts the tracking of route changes.
// component
import { NgxAnalyticsGoogleAnalytics } from 'ngx-analytics/ga';
@Component({ ... })
export class AppComponent {
constructor(ngx-analyticsGoogleAnalytics: NgxAnalyticsGoogleAnalytics) {}
}
To track events you can inject the directive ngx-analyticsOn
into any component and use the attributes ngx-analyticsOn
, angularticsAction
and angularticsCategory
:
// component
import { Component } from '@angular/core';
@Component({
selector: 'song-download-box',
template: `
<div
ngx-analyticsOn="click"
angularticsAction="DownloadClick"
[angularticsCategory]="song.name">
Click Me
</div>`,
})
export class SongDownloadBox {}
import { NgModule } from '@angular/core';
import { NgxAnalyticsModule } from 'ngx-analytics';
@NgModule({
imports: [
NgxAnalyticsModule,
],
declarations: [
SongDownloadBox,
]
})
If you need event label, you can use
<div
ngx-analyticsOn="click"
angularticsAction="DownloadClick"
angularticsLabel="label-name"
angularticsValue="value"
[angularticsCategory]="song.name"
[angularticsProperties]="{'custom-property': 'Fall Campaign'}">
Click Me
</div>
import { NgxAnalytics } from 'ngx-analytics';
constructor(private ngx-analytics: NgxAnalytics) {
this.ngx-analytics.eventTrack.next({
action: 'myAction',
properties: { category: 'myCategory' },
});
}
If you need event label
this.ngx-analytics.eventTrack.next({
action: 'myAction',
properties: {
category: 'myCategory',
label: 'myLabel',
},
});
Pass string literals or regular expressions to exclude routes from automatic pageview tracking.
NgxAnalyticsModule.forRoot([providers], {
pageTracking: {
excludedRoutes: [
/\/[0-9]{4}\/[0-9]{2}\/[a-zA-Z0-9|\-]*/,
'2017/03/article-title'
],
}
}),
/project/12981/feature
becomes /project/feature
NgxAnalyticsModule.forRoot([providers], {
pageTracking: {
clearIds: true,
}
}),
By default, it removes IDs matching this pattern (ie. either all numeric or UUID) : ^\d+$|^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
.
You can set your own regexp if you need to :
/project/a01/feature
becomes /project/feature
NgxAnalyticsModule.forRoot([providers], {
pageTracking: {
clearIds: true,
idsRegExp: /^[a-z]\d+$/,
}
}),
This can be combined with clearIds and idsRegExp
/project/12981/feature?param=12
becomes /project/12981/feature
NgxAnalyticsModule.forRoot([providers], {
pageTracking: {
clearQueryParams: true,
}
}),
Warning: this support is still experiemental
@angular/router
must still be installed! However, it will not be used.
import { NgxAnalyticsRouterlessModule } from 'ngx-analytics/routerlessmodule';
@NgModule({
// ...
imports: [
BrowserModule,
NgxAnalyticsRouterlessModule.forRoot([NgxAnalyticsGoogleAnalytics]),
],
})
Warning: this support is still experiemental
@angular/router
must still be installed! However, it will not be used.
import { NgxAnalyticsUirouterModule } from 'ngx-analytics/uiroutermodule';
@NgModule({
// ...
imports: [
BrowserModule,
NgxAnalyticsUirouterModule.forRoot([NgxAnalyticsGoogleAnalytics]),
],
})
- Google Analytics
- Google Tag Manager
- Google Enhanced Ecom
- Kissmetrics
- Mixpanel
- Piwik
- Segment
- Baidu Analytics
- Facebook Pixel
- Application Insights
- Hubspot
- Adobe Analytics (Omniture)
- Intercom
- Woopra
- Clicky
If there's no NgxAnalytics plugin for your analytics vendor of choice, please feel free to write yours and PR' it!
To setup Google Analytics add the folowing to main.ts
import {NgxAnalyticsGoogleAnalytics} from "ngx-analytics/ga";
if (environment.production) {
// ...
NgxAnalyticsGoogleAnalytics.prototype.createGaSession(environment.googleAnalytics);
}
you can add other environments if you want. In your environment.prod.ts add the configuration
export const environment = {
production: true,
// ...
googleAnalytics: {
domain: 'auto',
trackingId: 'UA-XXXXXXXX-X' // replace with your Tracking Id
}
};
for localhost environments replace 'auto' with 'none'
See Release Notes
Using SystemJS? If you aren't using defaultJSExtensions: true
you may need to use:
System.config({
packages: {
"/ngx-analytics": {"defaultExtension": "js"},
},
});
Please see the CONTRIBUTING and CODE_OF_CONDUCT files for guidelines.