【发布时间】:2013-08-11 12:28:53
【问题描述】:
所以我为 AngularJS 中的切换(下拉)菜单做了一个指令。我将指令用于页面中的多个项目,但我有一个小问题。当一个项目打开并单击另一个项目时,我希望前一个项目关闭。 event.preventDefault 和 event.stopPropagation 停止前一项的事件并且不会关闭它。有想法该怎么解决这个吗?有没有办法只在范围内停止事件?
app.directive('toggleMenu', function ($document) {
return {
restrict: 'CA',
link: function (scope, element, attrs) {
var opened = false;
var button = (attrs.menuButton ? angular.element(document.getElementById(attrs.menuButton)) : element.parent());
var closeButton = (attrs.closeButton ? angular.element(document.getElementById(attrs.closeButton)) : false);
var toggleMenu = function(){
(opened ? element.fadeOut('fast') : element.fadeIn('fast'));
};
button.bind('click', function(event){
event.preventDefault();
event.stopPropagation();
toggleMenu();
opened = ! opened;
});
element.bind('click', function(event){
if(attrs.stayOpen && event.target != closeButton[0]){
event.preventDefault();
event.stopPropagation();
}
});
$document.bind('click', function(){
if(opened){
toggleMenu();
opened = false;
}
});
}
};
这是一个小提琴:http://jsfiddle.net/JknUJ/5/ 按钮打开内容,在 div 外部单击时内容应关闭。当点击按钮 2 时,内容 1 并没有关闭。
【问题讨论】:
标签: events angularjs directive