将事件对象从指令传递到回调

Mar*_*ark 5 javascript angularjs angularjs-directive

我使用的是 Angular 1.5.6。

我有一个检查双击的指令:

angular.module('redMatter.analyse')
.directive('iosDblclick',
  function () {

      var DblClickInterval = 300; //milliseconds

      var firstClickTime;
      var waitingSecondClick = false;

      return {
          restrict: 'A',

          link: function (scope, element, attrs) {
              element.bind('click', function (e) {

                  if (!waitingSecondClick) {
                      firstClickTime = (new Date()).getTime();
                      waitingSecondClick = true;

                      setTimeout(function () {
                          waitingSecondClick = false;
                      }, DblClickInterval);
                  }
                  else {
                      waitingSecondClick = false;

                      var time = (new Date()).getTime();
                      if (time - firstClickTime < DblClickInterval) {

                          scope.$apply(attrs.iosDblclick);

                      }
                  }
              });
          }
      };
  });
Run Code Online (Sandbox Code Playgroud)

我在这里用这个:

<div ios-dblclick="onDoubleClick($event, graph)" ></div>
Run Code Online (Sandbox Code Playgroud)

graph是指令内的对象ng-repeat。在 onDoubleClick 中,我需要访问$event:

$scope.onDoubleClick = function($event, graph){

    console.log('in onDoubleClick and arguments are ', arguments);

    var element = $event.srcElement;
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何将事件从指令传递到onDoubleClick. 在控制台日志中,参数打印如下:

[undefined, Object]
Run Code Online (Sandbox Code Playgroud)

哪里。Object​ graph我怎样才能传回该事件?

Pan*_*kar 2

由于您可以locals通过$eval方法传递,因此请考虑在调用时使用它attrs.iosDblclick。在内部它使用$parseAPI 来评估方法并使用 local 作为参数。

scope.$eval(attrs.iosDblclick, {$event: e});
Run Code Online (Sandbox Code Playgroud)

笨蛋演示

也可以看看