Загрузочный загрузочный файл Twitter dropdown
находится внутри tr
. tr
можно кликать по ng-click
. Щелчок в любом месте страницы приведет к сбрасыванию выпадающего меню. Это поведение определено в директиве через $document.bind('click', closeMenu)
.
Итак, когда меню открыто, и пользователь нажимает на строку, я хочу, чтобы меню закрывалось (как это происходит) И я хочу предотвратить событие щелчка в строке.
JSFiddle: http://jsfiddle.net/LMc2f/1/
JSFiddle + директива inline: http://jsfiddle.net/9DM8U/1/
Соответствующий код из ui-bootstrap-tpls-0.10.0.js:
angular.module('ui.bootstrap.dropdownToggle', []).directive('dropdownToggle', ['$document', '$location', function ($document, $location) {
var openElement = null,
closeMenu = angular.noop;
return {
restrict: 'CA',
link: function(scope, element, attrs) {
scope.$watch('$location.path', function() { closeMenu(); });
element.parent().bind('click', function() { closeMenu(); });
element.bind('click', function (event) {
var elementWasOpen = (element === openElement);
event.preventDefault();
event.stopPropagation();
if (!!openElement) {
closeMenu();
}
if (!elementWasOpen && !element.hasClass('disabled') && !element.prop('disabled')) {
element.parent().addClass('open');
openElement = element;
closeMenu = function (event) {
if (event) {
event.preventDefault();
event.stopPropagation();
}
$document.unbind('click', closeMenu);
element.parent().removeClass('open');
closeMenu = angular.noop;
openElement = null;
};
$document.bind('click', closeMenu);
}
});
}
};
}]);
Я не могу понять, как остановить базовое событие ng-click
внутри closeMenu
.
ПРИМЕЧАНИЕ. Я не могу найти способ доступа к $event
, поэтому я не смог попробовать $event.stopPropagation()
.