我怎样才能使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(); }); }; });