在angular指令内调用函数并在参数中注入事件

时间:2013-10-23 18:58:46

标签: function angularjs angularjs-directive

我需要你的帮助。

我有一个带有函数参数的指令(范围:{myParam:'@'})。我在HTML中传递参数,比如my-param =“myFunc(param1,param2)”

这完美无缺。但是,我需要将事件对象注入参数。有人知道我该怎么办?

我尝试了$ provider.annotate和$ provider.instantiate,但是它们没有用,因为它在指令中使用了引用函数。 (在我的情况下为$ a),因此它无法获取函数参数。

任何想法?

3 个答案:

答案 0 :(得分:7)

当您调用&创建的功能时隔离范围语法,您可以将参数作为命名映射传递给它。如果您的指令定义如下:

scope: { myParam: '&' },
link: function (scope, el) {
  el.on('click', function (e) {
    scope.myParam({$event: e});
  });
}

并像这样使用:

<my-directive my-param="console.log($event)"></my-directive>

......你应该看到所希望的行为。

答案 1 :(得分:1)

chrisrhoden的答案很棒。我建议稍微扩展一下以下内容。这样做有助于防止与jQuery相关的移动设备和/或AngularJS冲突的ng-click双击问题。

myApp.directive('responsiveClick', function(){
  return {
    scope: { myCb: '&' },
    link: function (scope, el,attr) {
  el.bind('touchstart click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    scope.myCb({$event: e});
  });
  }
}
});

以及标记如下:

<a class="mdi-navigation-cancel" my-cb="removeBasketItem($event,item)" responsive-click></a>

答案 2 :(得分:0)

您是否尝试在原始函数中传递它?

my-param="myFunc($event, param1, param2)"