可靠地确定angular-ui模态是打开还是关闭(显示或隐藏)

时间:2013-12-11 12:21:28

标签: angularjs modal-dialog angular-ui

我正在寻找一种可靠地确定角度ui模态窗口当前是打开还是关闭的方法。

标准的Bootstrap JS提供了显示的' /'隐藏'这个事件。

现在我只能包装modal.close()函数并将变量设置为' closed'。此外,我删除模态对象,再次打开时重新实例化它。但这并不包括用户点击背景或按ESC键关闭模式的情况。

是否有一种干净的方式来覆盖这些案件?

1 个答案:

答案 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();
      }
    };
  }
]);