我怎样才能使AngularJS指令停止传播?

我试图“停止传播”,以防止点击一个li中的元素(链接)时closuresTwitter Bootstrap navbar下拉菜单。 使用这种方法似乎是常见的解决scheme 。

在Angular中,看起来像一个指令是做这个的地方吗? 所以我有:

// do not close dropdown on click directives.directive('stopPropagation', function () { return { link:function (elm) { $(elm).click(function (event) { event.stopPropagation(); }); } }; }); 

…但方法不属于元素:

 TypeError: Object [object Object] has no method 'stopPropagation' 

我把这个指令和

 <li ng-repeat="foo in bar"> <div> {{foo.text}}<a stop-propagation ng-click="doThing($index)">clickme</a> </div> </li> 

有什么build议么?

我用这种方法:创build一个指令:

  .directive('stopEvent', function () { return { restrict: 'A', link: function (scope, element, attr) { if(attr && attr.stopEvent) element.bind(attr.stopEvent, function (e) { e.stopPropagation(); }); } }; }); 

可以这样使用:

 <a ng-click='expression' stop-event='click'> 

这是阻止任何事件传播的更一般的方法。

“目前,一些指令(如ng:click)会阻止事件传播,从而妨碍了依赖捕获这些事件的其他框架的互操作性。 – 链接

…并且能够在没有指令的情况下进行修复,而只是简单地做:

 <a ng-click="doThing($index); $event.stopPropagation();">x</a> 

必须在事件对象上调用stopPropagation ,而不是元素本身。 这是一个例子:

 compile: function (elm) { return function (scope, elm, attrs) { $(elm).click(function (event) { event.stopPropagation(); }); }; } 

下面是一个简单的抽象指令来停止事件传播。 我认为这可能对某人有用。 只要通过你想停止的事件。

 <div stopProp="click"></div> 
 app.directive('stopProp', function () { return function (scope, elm, attrs) { elm.on(attrs.stopProp, function (event) { event.stopPropagation(); }); }; });