嗨,我正在尝试实现一个指令来跟踪GA的事件(例如click事件),但是由于某种原因,该指令被应用程序上的任何click事件触发,这是我的代码,我正在使用Phonegap GA插件:
myApp.directive('bcaTrackEvent', function () {
return {
restrict: "A",
link: function ($rootScope, element, attrs, ctrl) {
$rootScope.gaPlugIn.trackEvent(function(){}, function(){}, element.type, "Click", element.name, 1);
}
};
});
这是我正在使用的地方:
<div id="layout">
<p class="blank"></p>
<p class="logo"></p>
<p class="blank"></p>
<div id="signOptions">
<a ng-href="#/SignIn"><input bca-track-event name="signIn" class="bigbutton" type="button" value="{{'_SignIn_' | localizeIt}}" /></a>
<a ng-href="#/SignUp"><input class="bigbutton" type="button" value="{{'_SignUp_' | localizeIt}}"/></a>
<p class="blank"></p>
<a class="tourlink" href="#/TakeTour" data-localize-it="_TakeTour_"></a>
</div>
</div>
指令的链接功能将始终在首次添加该指令时运行,因此这就是您的代码每次都运行的原因。您需要在指令的链接函数内添加click事件处理程序,这将是仅在click上运行的位。
myApp.directive('bcaTrackEvent', function () {
return {
restrict: "A",
link: function ($rootScope, element, attrs, ctrl) {
element.on("click", function() {
$rootScope.gaPlugIn.trackEvent(function(){}, function(){}, element.type, "Click", element.name, 1);
});
}
};
});
顺便说一句,传递给链接函数的参数始终是作用域,元素,属性和控制器。您已经将$ rootScope编写为参数,但是实际上是在将伪指令重命名为$ rootScope。在这种情况下,范围继承意味着它无论如何都可以正常工作,但是我认为您最好将变量重命名为,scope
以防止潜在的混乱。
如果您需要真正的$ rootScope,请将其注入到指令本身而不是链接函数中,例如
myApp.directive('bcaTrackEvent', function ($rootScope) {
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句