http://plnkr.co/edit/hqXGl47EJ0wVaEgoXk3X?p=preview
我在努力寻找最好的方法来完成这件事。基本上,在我们的应用程序中有几个弹出式,用于模糊搜索、附加选项、帮助提示等。
当它们中的任何一个打开时,如果用户单击它之外的任何地方,比如身体,它们都需要关闭。
vs.togglePopover = function() {
vs.searchPopoverDisplay = vs.searchPopoverDisplay === false ? true: false;
};我目前在身体上的ng点击:
vs.closePopovers = function() {
PopFactory.hidePopovers();
};这将与工厂服务联系,该服务获取具有弹出窗口的所有控制器/指令的作用域,如果这些控制器/指令是打开的,则关闭它们。
当然,这会使弹出无法使用,因为一旦单击按钮打开弹出窗口,主app.js控制器就会检测到主体单击并关闭它。
var hidePopovers = function() {
searchPopover = ScopeFactory.getScope('search');
tagsSearchPopover = ScopeFactory.getScope('tagsPopover');
tagsSortPopover = ScopeFactory.getScope('tagsSearch');
tagsPanel = ScopeFactory.getScope('tagsPanel');
// is this popover open?
// if so close it, see the problem?
if (searchPopover.searchPopoverDisplay) {
searchPopover.searchPopoverDisplay = false;
}
if (tagsSearchPopover.tagSearchPopover) {
tagsSearchPopover.tagSearchPopover = false;
}
if (tagsSortPopover.tagsPopoverDisplay) {
tagsSortPopover.tagsPopoverDisplay = false;
}
if (tagsPanel.showingTagSearchInput) {
tagsPanel.showingTagSearchInput = false;
}
};
return {
hidePopovers : hidePopovers
};这个功能在带有弹出框的应用程序中通常是如何定位的?
发布于 2015-05-07 15:16:59
为什么不使用活动呢?
点击:
vs.closePopovers = function() {
$rootScope.$broadcast('closeAllPopovers');
};然后,在每个波波弗的范围内:
scope.$on('closeAllPopovers', function(){
close(); // Or however you close a popover
});使用注释中链接的Plunk:
单击该按钮时,您可以从按钮单击和主体单击中看到日志消息(在日志记录BTW上做得很好)。这意味着您对按钮的单次单击将由按钮(打开弹出窗口)和主体(关闭弹出按钮)进行处理。
看看这个扑通
要停止这种行为,需要告诉ng单击事件停止在元素层次结构上传播。谢天谢地,一旦你知道怎么做,这就很容易了。与此相关的问题 (我更喜欢第二个答案,我不喜欢.html中过多的代码)
https://stackoverflow.com/questions/30105051
复制相似问题