Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将事件对象从指令传递到回调_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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

Javascript 将事件对象从指令传递到回调,javascript,angularjs,angularjs-directive,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 {

我使用的是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);

                      }
                  }
              });
          }
      };
  });
但是,我不确定如何将事件从指令传递到DoubleClick。在控制台日志中,参数打印为:

[undefined, Object]

其中
对象
图形
。我怎样才能传回该事件?

已更新

-工作示例

因此,您可以像这样将函数传递给指令:

<div ios-dblclick="onDoubleClick" ios-dblclick-arg="graf" ></div>

在您的指令中:

      return {
      restrict: 'A',
      scope: {
        myCallback: '=iosDblclick',
        graph: '=iosDblclickArg'
      },
      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.myCallback(e, scope.graph)

                  }
              }
          });
      }
  }
返回{
限制:“A”,
范围:{
myCallback:'=iosDblclick',
图形:'=iosDblclickArg'
},
链接:函数(范围、元素、属性){
元素绑定('click',函数(e){
如果(!waitingSecondClick){
firstClickTime=(新日期()).getTime();
waitingSecondClick=true;
setTimeout(函数(){
waitingSecondClick=false;
},dblclick间隔);
}
否则{
waitingSecondClick=false;
var time=(新日期()).getTime();
if(时间-首次单击时间
您可以通过如下方式将回调传递给指令:
onDoubleClick:'&'
-隔离作用域


< p>因为您可以通过<代码>本地代码 > <代码> $EVA>代码>方法,在调用<代码> AtTr.IOSDBLCAK/<代码>时考虑使用它。在内部,它使用
$parse
API来评估方法,并使用local作为参数

scope.$eval(attrs.iosDblclick, {$event: e});

另请参见

      return {
      restrict: 'A',
      scope: {
        myCallback: '=iosDblclick',
        graph: '=iosDblclickArg'
      },
      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.myCallback(e, scope.graph)

                  }
              }
          });
      }
  }
webApp.directive('iosDblclick',
  function () {

      var DblClickInterval = 300; //milliseconds

      var firstClickTime;
      var waitingSecondClick = false;

      return {
          restrict: 'A',
          scope: {
            onDoubleClick: '&'
        },

          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.onDoubleClick({data: {e:e, val: "someValue"}});
                      }
                  }
              });
          }
      };
  });
<div ios-dblclick  on-double-click="onDoubleClick(data)" ></div>
$scope.onDoubleClick = function(data){
    var element = data.e.srcElement;
}
scope.$eval(attrs.iosDblclick, {$event: e});