Как я могу сделать директиву AngularJS для остановкиPropagation?
Я пытаюсь "stopPropagation", чтобы предотвратить выключение панели навигации Bootstrap Twitter после закрытия элемента (ссылки) внутри li. Использование этого метода представляется общим решением .
В 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>
Любые предложения?
Ответы
Ответ 1
"В настоящее время некоторые директивы (т.е. ng: click) останавливают распространение событий. Это предотвращает взаимодействие с другими структурами, которые полагаются на захват таких событий". - ссылка
... и смог установить без директивы и просто делать:
<a ng-click="doThing($index); $event.stopPropagation();">x</a>
Ответ 2
Я использовал этот способ: Создал директиву:
.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'>
Это более общий способ остановить распространение любых событий.
Ответ 3
stopPropagation
должен быть вызван на объект события, а не на сам элемент. Вот пример:
compile: function (elm) {
return function (scope, elm, attrs) {
$(elm).click(function (event) {
event.stopPropagation();
});
};
}
Ответ 4
Вот простая абстрактная директива о прекращении распространения события. Я полагаю, что это может быть полезно кому-то. Просто пройдите в том случае, если вы хотите остановиться.
<div stopProp="click"></div>
app.directive('stopProp', function () {
return function (scope, elm, attrs) {
elm.on(attrs.stopProp, function (event) {
event.stopPropagation();
});
};
});