我需要你的帮助。
我有一个带有函数参数的指令(范围:{ myParam:'@'})。我在 HTML 中传递参数,比如 my-param="myFunc(param1, param2)"
这完美地工作。但是,我需要将事件对象注入到参数中。有人知道我该怎么做吗?
我尝试了 $provider.annotate 和 $provider.instantiate,但它们没有工作,因为它在指令中使用了引用函数。(在我的情况下为 $a ),因此它无法获取函数参数。
任何想法?
我需要你的帮助。
我有一个带有函数参数的指令(范围:{ myParam:'@'})。我在 HTML 中传递参数,比如 my-param="myFunc(param1, param2)"
这完美地工作。但是,我需要将事件对象注入到参数中。有人知道我该怎么做吗?
我尝试了 $provider.annotate 和 $provider.instantiate,但它们没有工作,因为它在指令中使用了引用函数。(在我的情况下为 $a ),因此它无法获取函数参数。
任何想法?
当您调用由 & 隔离范围语法创建的函数时,您可以将参数作为命名映射传递给它。如果您的指令是这样定义的:
scope: { myParam: '&' },
link: function (scope, el) {
el.on('click', function (e) {
scope.myParam({$event: e});
});
}
并像这样使用:
<my-directive my-param="console.log($event)"></my-directive>
...您应该看到所需的行为。
克里斯罗登的回答很棒。我建议使用以下内容对其进行一些扩展。这样做将有助于防止与移动设备相关的 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>
您是否尝试在原始函数中传递它?
my-param="myFunc($event, param1, param2)"