This package enables you to setup Meta Pixel for your Angular application.
ngx-meta-pixel version | supported Angular version |
---|---|
^16.0.0 | ^16.0.0 |
^17.0.0 | ^17.0.0 |
^18.0.0 | ^18.0.0 |
^19.0.0 | ^19.0.0 |
^20.0.0 | ^20.0.0 |
npm install --save ngx-meta-pixel
If you are using standalone components, import the service and provide NgxMetaPixel providers with provideNgxMetaPixel
environment provider function.
In your application-level configuration file (app.config.ts
or main.ts
in older Angular versions), add the provideNgxMetaPixel
environment provider:
import { provideNgxMetaPixel } from "ngx-meta-pixel";
export const appConfig: ApplicationConfig = {
providers: [
// ... other environment providers
provideNgxMetaPixel({
pathToMetaPixelHtml: "assets/meta-pixel.html",
}),
],
};
You need to provide the function with the path of the html file containing the script and noscript tags for configuring through the pathToMetaPixelHtml
attribute from the NgxMetaPixelConfiguration
parameter.
export interface NgxMetaPixelConfiguration {
enabled?: boolean;
pathToMetaPixelHtml?: string;
}
Tracking is disabled at application start by default, if you want to enable it automatically, set the enabled
attribute to true
in the configuration parameter or follow GDPR complience by implementing proper behavior. See more about GDPR compliant code in a section below.
Add the NgxMetaPixelModule
the the AppModule
of your app:
import { NgxMetaPixelModule } from "ngx-meta-pixel";
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
HttpClientModule,
NgxMetaPixelModule.forRoot({ enabled: true, pathToMetaPixelHtml: 'assets/meta-pixel.html' }),
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
Using standalone components, you can still import NgxMetaPixelModule
the old way with Modules:
import { NgxMetaPixelModule } from "ngx-meta-pixel";
@Component({
// ...
imports: [
NgxMetaPixelModule.forRoot({
enabled: true,
pathToMetaPixelHtml: "assets/meta-pixel.html",
}),
],
})
export class AppComponent {
// ...
}
Meta provides users with pixel code similar to this:
<!-- Meta Pixel Code -->
<script>
!(function (f, b, e, v, n, t, s) {
if (f.fbq) return;
n = f.fbq = function () {
n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);
};
if (!f._fbq) f._fbq = n;
n.push = n;
n.loaded = !0;
n.version = "2.0";
n.queue = [];
t = b.createElement(e);
t.async = !0;
t.src = v;
s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t, s);
})(window, document, "script", "https://connect.facebook.net/en_US/fbevents.js");
fbq("init", "<YOUR_PIXEL_ID_HERE>");
fbq("PageView");
</script>
<noscript>
<img height="1" width="1" style="display: none" src="https://www.facebook.com/tr?id=<YOUR_PIXEL_ID_HERE>&ev=PageView&noscript=1" />
</noscript>
<!-- End Meta Pixel Code -->
You will need to do a total of three changes within this code:
- Add an
id="meta-pixel-script"
attribute to thescript
tag - Add an
id="meta-pixel-noscript"
attribute to thenoscript
tag - Delete any
fbq
function calls except thefbq("init", "<YOUR_PIXEL_ID_HERE>")
from thescript
tag
Then place the resulting html code in your assets directory or host it somewhere and provide relevant link to the ngx-meta-pixel
as shown below.
import { NgxMetaPixelService, NgxMetaPixelEventProperties, NgxMetaPixelEventName } from "ngx-meta-pixel";
@Component({
// ...
})
export class SomeComponent {
constructor(private readonly _ngxMetaPixelService: NgxMetaPixelService) {}
// ...
onSomeAction() {
const eventName: NgxMetaPixelEventName = "PageView";
const properties: NgxMetaPixelEventProperties = {
// ...
};
this._ngxMetaPixelService.track(eventName, properties);
}
}
import { NgxMetaPixelService } from "ngx-meta-pixel";
@Component({
// ...
})
export class SomeComponent {
constructor(private readonly _ngxMetaPixelService: NgxMetaPixelService) {}
// ...
onSomeAction() {
const eventName: string = "MyCustomEvent";
const properties: object = {
foo: "bar",
baz: 42,
};
this._ngxMetaPixelService.trackCustom(eventName, properties);
}
}
import { NgxMetaPixelService } from "ngx-meta-pixel";
@Component({
// ...
})
export class SomeComponent {
constructor(private readonly _ngxMetaPixelService: NgxMetaPixelService) {}
// ...
onSomeAction() {
this._ngxMetaPixelService.remove();
}
}
First initialize the NgxMetaPixelModule
with the enabled
fprop set to false
:
import { NgxMetaPixelModule } from "ngx-meta-pixel";
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
HttpClientModule,
NgxMetaPixelModule.forRoot({ enabled: false, pathToMetaPixelHtml: 'assets/meta-pixel.html' }),
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
Then ask user for permission to track their activity using the Meta Pixel:
import { NgxMetaPixelService } from "ngx-meta-pixel";
@Component()
// ...
export class AppComponent {
constructor(private readonly _ngxMetaPixelService: NgxMetaPixelService) {}
onUserAgreement() {
this._ngxMetaPixelService.initialize();
// you can also call this function with the path provided - this will
// overwrite the `NgxMetaPixelModule.forRoot()` path, if provided
this._ngxMetaPixelService.initialize("assets/meta-pixel.html");
}
}
Based on the ngx-multi-pixel package by Abhinav Akhil (abhinavakhil)
- tiagosantini for help with v18