我正在寻找一种可靠地确定角度ui模态窗口当前是打开还是关闭的方法。
标准的Bootstrap JS提供了显示的' /'隐藏'这个事件。
现在我只能包装modal.close()函数并将变量设置为' closed'。此外,我删除模态对象,再次打开时重新实例化它。但这并不包括用户点击背景或按ESC键关闭模式的情况。
是否有一种干净的方式来覆盖这些案件?
答案 0 :(得分:23)
<强> TLDR:强>
在您的应用中包含模块ui.bootstrap.modal
,在您的控制器/服务/中注入工厂$modalStack
,然后!!$modalStack.getTop()
就足以知道模态是否存在。
详细解决方案: 我遇到了同样的问题,我想出了以下工作:
有一个名为$modalStack
的工厂,它在ui-bootstrap lib中定义,用于处理模态。同一服务还有一个名为getTop()
的方法,它返回dom中最顶层的模态。 (以及关闭所有模态的方法dismissAll()
)。所以我写了一个带有一些小函数的小模块。
var utilsModule = angular.module('utilsModule', ['ui.bootstrap.modal']);
utilsModule.factory('modalUtils', [
'$modalStack',
function ($modalStack) {
return {
modalsExist: function () {
return !!$modalStack.getTop();
},
closeAllModals: function () {
$modalStack.dismissAll();
}
};
}
]);