【发布时间】:2016-10-31 14:36:41
【问题描述】:
我知道这可以用 jQuery 来完成,如下所示:How to have click event ONLY fire on parent DIV, not children?
$('.foobar').on('click', function(e) {
if (e.target !== this)
return;
alert( 'clicked the foobar' );
});
但在 Angular 中,this 关键字在我使用类似以下内容时未绑定到元素:
<div ng-dblclick="ctrl.doubleClickHandler($event)">
parent, event should fire here.
<div>child, event should not fire here.</div>
</div>
在我的控制器中:
this.doubleClickHandler = doubleClickHandler;
function doubleClickHandler(event) {
console.log(this); // this binds to controller
console.log(event);
}
事件触发,但是当我点击元素的子元素时,我需要阻止它触发。
我不想基于类或属性对event.target 的检查进行硬编码,因为以后可能会更改。有没有办法在 HTML 标记中实现这一点,或者在 JavaScript 中无需硬编码元素的类或属性(类似于在 jQuery 中绑定 this 关键字的技术)?
【问题讨论】:
-
为什么在 Angular 控制器中使用私有函数?
-
@Maher 我的控制器中有
this.doubleClickHandler = doubleClickHandler;,但这不是我认为的重点吗? -
@Maher 我被教导要通过 this.ctrlFunc() 而不是 $scope.cntrlFunc() 在控制器中保留不需要绑定到 $scope 私有的任何控制器逻辑。它仍然是公开的,因为您可以通过分配给控制器的名称来调用控制器内的函数。
-
我知道,我们可以将范围定义为控制器中的任何内容,但在此示例中,我们将函数定义为私有,因此我们无法获取控制台。
-
你在使用
jquery和angular吗?
标签: javascript angularjs