Angularjs 确定角度应用程序的单击方法的范围
我有一个角度的应用程序,我在其中显示一些菜单栏点击图标。我正在使用一个范围变量,并使用ng show显示/隐藏该变量。它工作正常,但有一个新的要求,即如果有人单击应用程序的任何其他部分,菜单应该关闭。现在的问题是,当我在主体中使用ng单击时,它会触发两种作用域方法,即图标单击和主体单击,因为图标也在主体中。我应该采取什么方法?我需要一个不同的控制器吗?在单击事件中,您需要确保目标不是图标(考虑排除菜单本身) 大概是这样的:Angularjs 确定角度应用程序的单击方法的范围,angularjs,Angularjs,我有一个角度的应用程序,我在其中显示一些菜单栏点击图标。我正在使用一个范围变量,并使用ng show显示/隐藏该变量。它工作正常,但有一个新的要求,即如果有人单击应用程序的任何其他部分,菜单应该关闭。现在的问题是,当我在主体中使用ng单击时,它会触发两种作用域方法,即图标单击和主体单击,因为图标也在主体中。我应该采取什么方法?我需要一个不同的控制器吗?在单击事件中,您需要确保目标不是图标(考虑排除菜单本身) 大概是这样的: $document.on('click', function (even
$document.on('click', function (event) {
if (event.pageX == 0 && event.pageY == 0) return;
var target = event.target || event.srcElement;
if (!(elm.contains(target))) {
// close the menu
}
});
elm是您的图标元素
也可以考虑在一个添加到主体的关闭侦听器中使用诸如:
< P>这样的指令,检查事件不是来自您的图标:var closeListener = function(event) {
if (!iconElement.contains(event.target)) {
closeMenu();
}
};
这里的问题是,当从主体触发事件时,只有在打开菜单时才应关闭菜单。如果从图标触发,则菜单应在关闭时打开,在打开时关闭。现在从你的答案中得到一个提示,如果我把逻辑写为:if(!(elm.contains(target)){//如果关闭就打开菜单,反之亦然}否则{如果打开就关闭菜单}。此事件被触发两次,因此首先出现菜单,然后关闭。我目前使用的是ng click而不是指令。我建议检查我链接到的指令。它提供了您需要的功能:单击将关闭菜单,您可以排除元素。问题是,单击偶数被触发两次。一次用于父容器,另一次用于子容器。因此,菜单将打开,然后关闭。