AngularJS:如何通过点击停止事件传播
AngularJS: How to stop event propagation from ng-click?
我有这样的指令:
app.directive('custom', function(){
return {
restrict:'A',
link: function(scope, element){
element.bind('click', function(){
alert('want to prevent this');
});
}
}
});
是的,对于这种情况,有必要进行jQuery方式绑定。
现在,如果满足某些条件,我想停止此事件(点击)传播。
尝试做:
$event.stopPropagation();
$event.preventDefault();
但这无济于事。
以小提琴为例-http://jsfiddle.net/STEVER/5bfkbh7u/
在您的案例中,由于点击事件发生在同一个元素上,您无法停止传播,只有两个不同的处理程序。
但是,您可以利用以下事实:这是控制器ngClick
和指令中相同的事件对象。因此,您可以为这个事件对象设置一些属性,并在指令中检查它
$scope.dosomething = function($event){
$event.stopPropagation();
$event.preventDefault();
alert('here');
if (someCondtion) {
$event.stopNextHandler = true;
}
}
和在指令中:
link: function(scope, element){
element.bind('click', function(e) {
if (e.stopNextHandler !== true) {
alert('want to prevent this');
}
});
}
演示:http://jsfiddle.net/5bfkbh7u/6/
您是否尝试降低此指令的优先级以确保它在ng-click指令之后绑定?我假设事件按照它们被绑定的顺序启动,这反过来又由ng-click指令与您的指令的优先级决定。
您还需要stopImmediatePropagation来防止同一元素上的任何其他处理程序被激发。stopPropagation只是阻止事件传播到父处理程序。
Use e.stopImmediatePropagation();
elem.bind('click', function (e) {
if (disable(scope)){
e.stopImmediatePropagation();
return false;
}
return true;
});
这里没有任何事件传播,因为你有按钮,你必须在同一个元素上发生事件,这不是子元素的父元素,即这里没有事件冒泡或事件捕获
您将两个事件都附加到按钮上。注册第二个事件时检查元素
<div ng-controller="mainCtrl" custom>
Hi! I'm the parent.
<button ng-click="dosomething($event)">BUTTON</button>
</div>
Showcase
相关文章:
- 停止jquery中元素上的事件传播
- 停止点击事件传播
- 为什么我的按钮正在将事件传播到其父项
- 我可以停止某个函数上的事件传播吗
- AngularJS:如何通过点击停止事件传播
- 避免通过指令中的事件传播进行自切换
- 棱角分明如何防止点击事件传播到日期选取器元素
- 停止自动回发复选框的事件传播
- jQuery 事件传播无法按预期工作
- 用于停止事件传播的 jQuery UI 滑块
- 在 Google Maps API v3 中有效启用事件传播
- 停止传单事件传播
- 角度/离子点击事件传播
- setAbstractView() 可防止鼠标关闭事件传播到 KmlFeatures
- Phaser JS如何停止事件从textButton.events.onInputDown事件传播(触发)到game.i
- 仅追加一次 UI 元素,避免事件传播
- JavaScript + 事件传播
- 在表行单击时停止 JS 事件传播
- 停止特定处理程序的事件传播
- 无法停止 AngularJS 中路由控制器之间的事件传播