Skip to content

Instantly share code, notes, and snippets.

@sanjeevsubedi
Created March 7, 2023 14:57
Show Gist options
  • Save sanjeevsubedi/6387928fe1a5b67bfda5ef9f2561bcf2 to your computer and use it in GitHub Desktop.
Save sanjeevsubedi/6387928fe1a5b67bfda5ef9f2561bcf2 to your computer and use it in GitHub Desktop.
Angular class decorator to track the page visit
/**
* Angular class decorator to track the page visit
*
*/
import { Injector } from '@angular/core';
import { AnalyticService } from '../analytics.service';
export function PageAnalytics(pageName: string) {
return function (constructor: Function) {
// Note: AnalyticService is used to illustrate the injection of dependency in decorator responsible for tracking
let injector = Injector.create({
providers: [{ provide: AnalyticService, useClass: AnalyticService }],
});
const analyticsService = injector.get(AnalyticService);
const originalNgOnInit = constructor.prototype.ngOnInit;
constructor.prototype.ngOnInit = function () {
analyticsService.track(pageName);
originalNgOnInit && originalNgOnInit.apply(this);
};
};
}
/**
* How to use it?
*
* @PageAnalytics('customerPage')
* export class CustomersComponent implements OnInit {
* ........
* }
*
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment