Skip to content

Commit

Permalink
feat: use providedIn root to automatically provide as singleton (#284)
Browse files Browse the repository at this point in the history
breaking change: array of providers no longer needed to pass to `Angulartics2Module`
  • Loading branch information
scttcper committed Aug 2, 2018
1 parent 28f987f commit a548540
Show file tree
Hide file tree
Showing 31 changed files with 79 additions and 79 deletions.
26 changes: 13 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Vendor-agnostic Analytics for Angular Applications. [angulartics.github.io/angul
- [Installation](#installation)
- [Include it in your application](#include-it-in-your-application)
- [Usage](#usage)
- [Tracking events in templates/HTML](#tracking-events-in-templates-html)
- [Tracking events in templates/HTML](#tracking-events-in-templateshtml)
- [Tracking events in the code](#tracking-events-in-the-code)
- [Configuring the Module](#configuring-the-module)
- [Exclude routes from automatic pageview tracking](#exclude-routes-from-automatic-pageview-tracking)
Expand All @@ -25,7 +25,6 @@ Vendor-agnostic Analytics for Angular Applications. [angulartics.github.io/angul
- [Supported providers](#supported-providers)
- [For other providers](#for-other-providers)
- [Minimal setup for Google Analytics](#minimal-setup-for-google-analytics)
- [v4 Migration and Breaking Changes](#v4-migration-and-breaking-changes)
- [Contributing](#contributing)
- [License](#license)

Expand All @@ -37,7 +36,7 @@ npm install angulartics2 --save

### Include it in your application

1. Add `Angulartics2Module` to your root NgModule passing an array of providers to enable
1. Add `Angulartics2Module` to your root NgModule passing any options desired
```ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
Expand All @@ -57,7 +56,7 @@ const ROUTES: Routes = [
RouterModule.forRoot(ROUTES),

// added to imports
Angulartics2Module.forRoot([Angulartics2GoogleAnalytics]),
Angulartics2Module.forRoot(),
],
declarations: [AppComponent],
bootstrap: [AppComponent],
Expand Down Expand Up @@ -96,7 +95,8 @@ import { Component } from '@angular/core';
angularticsAction="DownloadClick"
[angularticsCategory]="song.name">
Click Me
</div>`,
</div>
`,
})
export class SongDownloadBox {}

Expand Down Expand Up @@ -157,7 +157,7 @@ this.angulartics2.eventTrack.next({

Pass string literals or regular expressions to exclude routes from automatic pageview tracking.
````ts
Angulartics2Module.forRoot([providers], {
Angulartics2Module.forRoot({
pageTracking: {
excludedRoutes: [
/\/[0-9]{4}\/[0-9]{2}\/[a-zA-Z0-9|\-]*/,
Expand All @@ -171,7 +171,7 @@ Angulartics2Module.forRoot([providers], {

`/project/12981/feature` becomes `/project/feature`
````ts
Angulartics2Module.forRoot([providers], {
Angulartics2Module.forRoot({
pageTracking: {
clearIds: true,
}
Expand All @@ -183,7 +183,7 @@ You can set your own regexp if you need to :

`/project/a01/feature` becomes `/project/feature`
````ts
Angulartics2Module.forRoot([providers], {
Angulartics2Module.forRoot({
pageTracking: {
clearIds: true,
idsRegExp: new RegExp('^[a-z]\\d+$') /* Workaround: No NgModule metadata found for 'AppModule' */
Expand All @@ -197,7 +197,7 @@ This can be combined with clearIds and idsRegExp

`/project/12981/feature?param=12` becomes `/project/12981/feature`
````ts
Angulartics2Module.forRoot([providers], {
Angulartics2Module.forRoot({
pageTracking: {
clearQueryParams: true,
}
Expand All @@ -208,7 +208,7 @@ Angulartics2Module.forRoot([providers], {

`/callback#authcode=123&idToken=456` becomes `/callback`
````ts
Angulartics2Module.forRoot([providers], {
Angulartics2Module.forRoot({
pageTracking: {
clearHash: true,
}
Expand All @@ -225,7 +225,7 @@ import { Angulartics2RouterlessModule } from 'angulartics2/routerlessmodule';
// ...
imports: [
BrowserModule,
Angulartics2RouterlessModule.forRoot([Angulartics2GoogleAnalytics]),
Angulartics2RouterlessModule.forRoot(),
],
})
````
Expand All @@ -240,7 +240,7 @@ import { Angulartics2UirouterModule } from 'angulartics2/uiroutermodule';
// ...
imports: [
BrowserModule,
Angulartics2UirouterModule.forRoot([Angulartics2GoogleAnalytics]),
Angulartics2UirouterModule.forRoot(),
],
})
````
Expand All @@ -259,7 +259,7 @@ System.config({
## Supported providers

* [Google Analytics](/src/lib/providers/ga) (`analytics.js`)
* [Google Tag Manager](/src/lib/providers/gtm) (`gtag.js`)
* [Google Tag Manager](/src/lib/providers/gtm)
* [Google Enhanced Ecom](/src/lib/providers/ga-enhanced-ecom)
* [Kissmetrics](/src/lib/providers/kissmetrics)
* [Mixpanel](/src/lib/providers/mixpanel)
Expand Down
2 changes: 1 addition & 1 deletion src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';
@NgModule({
imports: [
// added to imports
Angulartics2Module.forRoot([Angulartics2GoogleAnalytics]),
Angulartics2Module.forRoot(),
],
})
`;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/core/angular-router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { RouterlessTracking, TrackNavigationEnd } from './routerless';
*
* @link https://angular.io/api/router/Router
*/
@Injectable()
@Injectable({ providedIn: 'root' })
export class AngularRouterTracking implements RouterlessTracking {
constructor(
private router: Router,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/core/angulartics2-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { EventTrack, PageTrack, UserTimings } from './angulartics2-interfaces';
import { Angulartics2Token, ANGULARTICS2_TOKEN } from './angulartics2-token';
import { RouterlessTracking, TrackNavigationEnd } from './routerless';

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2 {
settings: Angulartics2Settings;

Expand Down
3 changes: 1 addition & 2 deletions src/lib/core/angulartics2-token.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { InjectionToken, Provider } from '@angular/core';
import { InjectionToken } from '@angular/core';

import { Angulartics2Settings } from './angulartics2-config';

export interface Angulartics2Token {
providers: Provider[];
settings: Partial<Angulartics2Settings>;
}

Expand Down
13 changes: 3 additions & 10 deletions src/lib/core/angulartics2.module.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import {
ModuleWithProviders,
NgModule,
Provider,
} from '@angular/core';
import { ModuleWithProviders, NgModule } from '@angular/core';

import { AngularRouterTracking } from './angular-router';
import { Angulartics2Settings } from './angulartics2-config';
Expand All @@ -11,23 +7,20 @@ import { ANGULARTICS2_TOKEN } from './angulartics2-token';
import { Angulartics2On, Angulartics2OnModule } from './angulartics2On';
import { RouterlessTracking } from './routerless';


@NgModule({
imports: [Angulartics2OnModule],
exports: [Angulartics2On],
})
export class Angulartics2Module {
static forRoot(
providers: Provider[],
settings: Partial<Angulartics2Settings> = {},
): ModuleWithProviders {
return {
ngModule: Angulartics2Module,
providers: [
{ provide: ANGULARTICS2_TOKEN, useValue: { providers, settings } },
Angulartics2,
{ provide: ANGULARTICS2_TOKEN, useValue: { settings } },
{ provide: RouterlessTracking, useClass: AngularRouterTracking },
...providers,
Angulartics2,
],
};
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/core/angulartics2On.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { Angulartics2On } from './angulartics2On';

jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;

@Injectable()
@Injectable({ providedIn: 'root' })
export class DummyProvider {
// tslint:disable-next-line:no-unused-variable
constructor(private angulartics2: Angulartics2) {}
Expand Down Expand Up @@ -82,7 +82,7 @@ describe('angulartics2On', () => {
imports: [
CommonModule,
RouterTestingModule,
Angulartics2Module.forRoot([DummyProvider]),
Angulartics2Module.forRoot(),
],
declarations: [RootCmp, RootCmp1, RootCmp2, RootCmp3],
providers: [{ provide: Location, useClass: SpyLocation }],
Expand Down Expand Up @@ -167,7 +167,7 @@ describe('angulartics2On', () => {
);

describe('running on server', () => {
@Injectable()
@Injectable({ providedIn: 'root' })
@Directive({
selector: '[angulartics2On]',
})
Expand Down
2 changes: 0 additions & 2 deletions src/lib/core/angulartics2On.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ import {
AfterContentInit,
Directive,
ElementRef,
Injectable,
Input,
NgModule,
Renderer2,
} from '@angular/core';
import { Angulartics2 } from './angulartics2-core';

@Injectable()
@Directive({ selector: '[angulartics2On]' })
export class Angulartics2On implements AfterContentInit {
// tslint:disable-next-line:no-input-rename
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/adobeanalytics/adobeanalytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Angulartics2 } from 'angulartics2';

declare const s: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2AdobeAnalytics {

constructor(
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/amplitude/amplitude.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ declare var amplitude: {
}
};

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Amplitude {

constructor(private angulartics2: Angulartics2) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/appinsights/appinsights.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export class AppInsightsDefaults implements AppInsightsSettings {
userId = null;
}

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2AppInsights {
loadStartTime: number = null;
loadTime: number = null;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/baidu/baidu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Angulartics2 } from 'angulartics2';

declare var _hmt: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2BaiduAnalytics {
constructor(private angulartics2: Angulartics2) {
if (typeof _hmt === 'undefined') {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/clicky/clicky.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { ClickyProperties } from './clicky.interfaces';

declare var clicky: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Clicky {
constructor(
private angulartics2: Angulartics2,
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/facebook/facebook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const facebookEventList = [
'CompleteRegistration',
];

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Facebook {
constructor(private angulartics2: Angulartics2) { }

Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/ga-enhanced-ecom/ga-enhanced-ecom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {

declare var ga: UniversalAnalytics.ga;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2GoogleAnalyticsEnhancedEcommerce {
/**
* Add impression in GA enhanced ecommerce tracking
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/ga/ga.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export class GoogleAnalyticsDefaults implements GoogleAnalyticsSettings {
anonymizeIp = false;
}

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2GoogleAnalytics {
dimensionsAndMetrics = [];

Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/gtm/gtm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export class GoogleTagManagerDefaults implements GoogleTagManagerSettings {
userId = null;
}

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2GoogleTagManager {

constructor(
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/hubspot/hubspot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Angulartics2 } from 'angulartics2';

declare var _hsq: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Hubspot {

constructor(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { Angulartics2 } from 'angulartics2';

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2IBMDigitalAnalytics {
constructor(private angulartics2: Angulartics2) {
if (typeof window['cmCreatePageviewTag'] !== 'function') {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/intercom/intercom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Angulartics2 } from 'angulartics2';

declare var Intercom: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Intercom {

constructor(
Expand Down
2 changes: 1 addition & 1 deletion src/lib/providers/kissmetrics/kissmetrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Angulartics2 } from 'angulartics2';

declare var _kmq: any;

@Injectable()
@Injectable({ providedIn: 'root' })
export class Angulartics2Kissmetrics {

constructor(
Expand Down

0 comments on commit a548540

Please sign in to comment.