How can I make an AngularJS directive to stopPropagation?
我试图"停止传播",以防止当点击LI中的元素(链接)时,Twitter引导导航栏下拉列表关闭。使用这种方法似乎是常见的解决方案。
在角度上,似乎有一个指示是做这件事的地方?所以我有:
1 2 3 4 5 6 7 8 9 10
| // do not close dropdown on click
directives.directive('stopPropagation', function () {
return {
link:function (elm) {
$(elm).click(function (event) {
event.stopPropagation();
});
}
};
}); |
…但该方法不属于元素:
1
| TypeError: Object [object Object] has no method 'stopPropagation' |
我把指令和
1 2 3 4 5 6
| <li ng-repeat="foo in bar">
{{foo.text}}clickme
</li> |
有什么建议吗?
- 您应该在标记中为javascript(甚至jquery)留出一些空间。
- 好建议。进行编辑。
- event.stopPropagation()在代码中不起作用的原因是AngularJS和JQuery有两个独立的事件周期。这就是为什么两者都用通常是个坏主意的原因之一。使用ngClick定义的单击事件使用angular,但您试图使用jquery来停止事件传播。
我用这种方式:创建了一个指令:
1 2 3 4 5 6 7 8 9 10 11
| .directive('stopEvent', function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
if(attr && attr.stopEvent)
element.bind(attr.stopEvent, function (e) {
e.stopPropagation();
});
}
};
}); |
可以这样使用:
这是阻止任何类型事件传播的更通用的方法。
- 你可以对btw,elaborate restrict例?没有找到一个很好的资源正是这意味着什么。
- 当然!docs.angularjs.org /指南/指示"的指示定义的面向对象的subset":restrict -弦乐的eacm restricts到一个具体的指示,指示宣言的风格。如果omitted属性只有在directives是允许的。
- 这是一个有趣的方法。我喜欢它。谢谢你!
- 工作像一个charm!
- 相同的解决方案,为.prefentdefault()在ie7让页面reloads从事。伟大的解决方案。
- 哦,主啊,我爱directives
- 这并不为我工作,不是在Safari Mobile iOS 7。但event.stopprogation美元()的作品。
- attr.ngstopevent瓦大= =!="*"?"attr.ngstopevent模糊焦点focusin focusout load resize unload点击滚动dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave变化选择提交keydown keypress keyup error";在element.bind wildcard /大(大的支持
- 哟,我添加if(attr && attr.stopEvent)安全检查只是为了让事情更安全一点。让我知道如果这不是很酷。希望它helps:]。谢谢你为snippet the
- 我使用这个解决方案;它和它好的作品似乎更"清洁煤"为我的选择的答案。
- 非常感谢你!你能拯救我的生活!我使用它:)angular滚动的内容里面的材料设计bottomsheet:material.angularjs.org / 3.3/演示/ bottomsheet这里是我如何使用它:
- 我有一个checkbox和一个查询的heading accordion里面的安全。当压对checkbox或查询,或封闭(不accordion打开了大街上的desired效应)。我解决这个ng-click="$event.stopImmediatePropagation();"由adding checkbox ng-click="$event.stopImmediatePropagation();$event.preventDefault();"文献和文献查询,和现在的一切作品作为预计。
"目前,一些指令(例如,ng:click)停止事件传播。这就阻止了与依赖于捕获此类事件的其他框架的互操作性。"—link
…并且能够在没有指令的情况下进行修复,并且只需执行以下操作:
- 这是完美的。我有一个dropdown与形式在它。="-点击添加我的event.stoppropagation(美元)"的div周围的形式和固定的方法,dropdown从要当clicked inputs是的形式。谢谢你!
- 这glad帮助!
- 简单的解决方案。perfectly工作。我会更喜欢这一个指示煤而创造的。
- 事实上,在大simplier煤创造了一个指示。作品为我好。谢谢你
- 为一个单一的scenario简单使用。我会使用一个大的recommend指示的人谁需要多大的地方使用这个代码在整个的观点-为一,这是容易处理的functionality管扩大,更多的事件,尤其是尝试和发现逻辑的研究多为markup出来作为可能的。欢呼!
- 如果我们不做这个战略的另一个作品的点击在链接按钮,对当前link.the封闭不?
必须对事件对象而不是元素本身调用stopPropagation。下面是一个例子:
1 2 3 4 5 6 7
| compile: function (elm) {
return function (scope, elm, attrs) {
$(elm).click(function (event) {
event.stopPropagation();
});
};
} |
- 谢谢你。所以,这个问题我编辑的指示在调用事件和不stoppropagation元。不工作。本文发现:"目前一些directives(即:停止事件传播的点击)。这prevents interoperability,如与其他frameworks依靠地捕获事件。"github.com angular /问题/ / / angular.js 259
- 所以,发现这个大的修复:X
下面是一个简单、抽象的指令来停止事件传播。我想这可能对某人有用。如果你想停下来,就通过。
1 2 3 4 5 6 7
| app.directive('stopProp', function () {
return function (scope, elm, attrs) {
elm.on(attrs.stopProp, function (event) {
event.stopPropagation();
});
};
}); |