AngularJS:如何从ng-click停止事件传播?

Ste*_*rov 8 javascript event-propagation angularjs angularjs-directive

我有指令做这样的事情:

app.directive('custom', function(){
    return {
        restrict:'A',
        link: function(scope, element){
            element.bind('click', function(){
                alert('want to prevent this');
            });

        }
    }
});
Run Code Online (Sandbox Code Playgroud)

是的,有必要为这种情况做jQuery-way绑定.

现在,如果满足某些条件,我想停止此事件(单击)传播.

试图做:

  $event.stopPropagation();
  $event.preventDefault();
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.

这里小提琴 - 例如http://jsfiddle.net/STEVER/5bfkbh7u/

dfs*_*fsq 7

在你的情况下你不能停止传播因为click事件发生在同一个元素上,只有两个不同的处理程序.

但是,您可以利用这一事实,即在控制器和指令中这是相同的事件对象ngClick.所以你可以做的是为这个事件对象设置一些属性并在指令中检查它:

$scope.dosomething = function($event){
    $event.stopPropagation();
    $event.preventDefault();
    alert('here');

    if (someCondtion) {
        $event.stopNextHandler = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在指令中:

link: function(scope, element){
    element.bind('click', function(e) {
        if (e.stopNextHandler !== true) {
            alert('want to prevent this');    
        }
    });            
}
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/5bfkbh7u/6/