2

我需要你的帮助。

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

这完美地工作。但是,我需要将事件对象注入到参数中。有人知道我该怎么做吗?

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

任何想法?

4

3 回答 3

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>

...您应该看到所需的行为。

于 2013-10-24T15:51:42.493 回答
1

克里斯罗登的回答很棒。我建议使用以下内容对其进行一些扩展。这样做将有助于防止与移动设备相关的 ng-click 双击问题和/或 AngularJS 与 jQuery 的冲突。

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>
于 2015-04-14T21:10:28.297 回答
0

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

my-param="myFunc($event, param1, param2)"
于 2013-10-23T19:27:29.780 回答