ngx-analytics
Vendor-agnostic Analytics for Angular Applications. angulartics.github.io/ngx-analytics
- Installation
- [Include it in your application](#include-it-in-your-application)
- Usage- [Tracking events](#tracking-events)
- [Tracking events in the code](#tracking-events-in-the-code)
- [Exclude routes from automatic pageview tracking](#exclude-routes-from-automatic-pageview-tracking)
- [Remove ID's from url paths](#remove-ids-from-url-paths)
- [Remove Query Params from url paths](#remove-query-params-from-url-paths)
- [Using Without A Router](#using-without-a-router)
- [Using With UI-Router](#using-with-ui-router)
- Supported providers- [For other providers](#for-other-providers)
- [Minimal setup for Google Analytics](#minimal-setup-for-google-analytics)
- v4 Migration and Breaking Changes
- SystemJS
- Contributing
- LicenseInstallation
npm install ngx-analytics --save
Include it in your application
- 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) {}
}
Usage
Tracking events
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>
Tracking events in the code
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',
},
});
Exclude routes from automatic pageview tracking
Pass string literals or regular expressions to exclude routes from automatic pageview tracking. ````ts NgxAnalyticsModule.forRoot(providers, { pageTracking: {excludedRoutes: [
/\/[0-9]{4}\/[0-9]{2}\/[a-zA-Z0-9|\-]*/,
'2017/03/article-title'
],
}
}),
````Remove ID's from url paths
/project/12981/feature
becomes /project/feature
````ts
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
````ts
NgxAnalyticsModule.forRoot(providers, {pageTracking: {
clearIds: true,
idsRegExp: /^[a-z]\d+$/,
}
}),
````Remove Query Params from url paths
This can be combined with clearIds and idsRegExp/project/12981/feature?param=12
becomes /project/12981/feature
````ts
NgxAnalyticsModule.forRoot(providers, {
pageTracking: {clearQueryParams: true,
}
}),
````Using Without A Router
Warning: this support is still experiemental@angular/router
must still be installed! However, it will not be used.
````ts
import { NgxAnalyticsRouterlessModule } from 'ngx-analytics/routerlessmodule';
@NgModule({
// ...
imports: BrowserModule,
NgxAnalyticsRouterlessModule.forRoot([NgxAnalyticsGoogleAnalytics]),
,
})
````Using With UI-Router
Warning: this support is still experiemental@angular/router
must still be installed! However, it will not be used.````ts import { NgxAnalyticsUirouterModule } from 'ngx-analytics/uiroutermodule'; @NgModule({ // ... imports:
BrowserModule,
NgxAnalyticsUirouterModule.forRoot([NgxAnalyticsGoogleAnalytics]),
,
})
````Supported providers
- 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
For other providers
If there's no NgxAnalytics plugin for your analytics vendor of choice, please feel free to write yours and PR' it!Minimal setup for Google Analytics
To setup Google Analytics add the folowing to main.tsimport {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'
v4 Migration and Breaking Changes
See Release NotesSystemJS
Using SystemJS? If you aren't usingdefaultJSExtensions: true
you may need to use:
System.config({
packages: {
"/ngx-analytics": {"defaultExtension": "js"},
},
});