16

AngularJS ng-click ディレクティブを変更して、いくつかの追加機能を追加することを検討しています。何に使用するかについていくつかの異なるアイデアがありますが、単純なものは、すべての ng-clicks に Google アナリティクスの追跡を追加することであり、もう 1 つはダブルクリックを防止することです。

これを行うために、最初に考えたのはデコレータを使用することでした。だから、このようなもの:

app.config(['$provide', function($provide) {
  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
    // Trigger Google Analytics tracking here
    return $delegate;
  }]);
}]);

ただし、ディレクティブの式が満たされたときではなく、インスタンス化時にデコレータが起動されるため、これは機能しません。したがって、この場合、要素がクリックされたときではなく、ディレクティブを持つ要素がロードされたときに分析を行います。

それでは、本当の質問に進みます。ディレクティブがインスタンス化されている要素をデコレータが取得する方法はありますか? デリゲートから要素に到達できれば、自分のクリック イベントをバインドして、ng-click に加えてトリガーすることができます。

そうでない場合、すべての ng-clicks に何かを追加するにはどうすればよいですか?

4

2 に答える 2

7

これは正しい更新バージョンです(回答から改善されました):

$provide.decorator('ngClickDirective', function($delegate) {
    var compile = $delegate[0].compile;
    $delegate[0].compile = function() {
       var link = compile.apply(this, arguments);
       return function(scope, element, attrs, transclude) {
           if (attrs.track !== undefined) {
               element.bind('click', function() {
                   console.log('Tracking this');
               });
           }
           return link.apply(this, arguments);
       };
    };
    return $delegate;
});
于 2015-12-05T15:24:19.277 に答える