Надежно определите, открыт ли /w 500> -ui модаль (открыт или закрыт)

Я ищу способ, чтобы надежно определить, открыто ли в настоящее время модальное окно angular -ui.

Стандартный Bootstrap JS предоставляет для этого "показанные" / "скрытые" события.

В настоящее время я могу только обернуть функцию modal.close() и установить переменную в "closed". Кроме того, я удаляю модальный объект, повторно создавая его при открытии снова. Но это не распространяется на случаи, когда пользователь нажимает на задний план или нажимает клавишу ESC для закрытия модального файла.

Есть ли простой способ для покрытия этих случаев?

Ответы

Ответ 1

TL;DR: Включите модуль ui.bootstrap.modal в ваше приложение, введите factory $modalStack в свой контроллер/службу/что-то еще, а затем !!$modalStack.getTop() достаточно, чтобы узнать, существует ли модальный вариант.

Подробное решение: Я столкнулся с той же проблемой, и я придумал следующую работу:

Существует factory, называемый $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();
      }
    };
  }
]);