1

嗨,我正在尝试实现一个指令来跟踪 GA 的事件(例如点击事件),但由于某种原因,该指令会被应用程序上的任何点击事件触发,这是我的代码,顺便说一下,我正在使用 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>
4

1 回答 1

2

指令的链接函数将始终在首次添加指令时运行,这就是您的代码每次都运行的原因。您需要在指令的链接函数内添加一个单击事件处理程序,这将是仅在单击时运行的位。

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。在这种情况下,范围继承意味着它无论如何都可以工作,但我认为你最好将变量重命名为scopejustthough 以防止潜在的混淆。

如果您需要真正的 $rootScope,请将其注入指令本身而不是链接函数,例如

myApp.directive('bcaTrackEvent', function ($rootScope) {
于 2013-08-18T07:22:02.263 回答