Here is what I am doing, it seems to work so far:
In my index.html file, I removed the PageView function and commented out the pixel itself, as shown below.
<head> <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','//connect.facebook.net/en_US/fbevents.js'); fbq('init', 'XXXXXXXXXX'); </script> </noscript>--> </head>
Then I configure the application as follows:
.config(['$stateProvider', '$urlRouterProvider', '$windowProvider', function($stateProvider, $urlRouterProvider, $windowProvider) { var $window = $windowProvider.$get();
Now, for each state change, I use onEnter and onExit to disable the βeventsβ that I want to capture:
.state('foo.bar', { url:'/bar', templateUrl: 'template.html', controller: 'templateCtrl', onEnter: function(){ $window.fbq('track', "Page1Enter"); }, onExit: function(){ $window.fbq('track', "Page1Exit"); } })
I guess if I wanted to, I could just move any fbq('track', "PageView"); code fbq('track', "PageView"); to the controller. However, for my use case, tracking state changes works fine for monitoring the flow from my application.
Hope this helps someone else.