Угловое обнаружение, если всплывающее окно открыто - PullRequest
0 голосов
/ 28 сентября 2018

На моей доске (написано на Angular 4) диалоговые окна открываются, как показано ниже:

Импорт ActivatedRoute, Router

import { ActivatedRoute, Router } from '@angular/router';

Добавление ссылок Router и ActivatedRoute в конструкторе

constructor ( ... private _router: Router, private _activatedRoute: ActivatedRoute, ...)

и его использованиениже:

this._router.navigate(['./', { outlets: { somemodal: 'somemodal', dialogs: null }, relativeTo: this._activatedRoute }]);

Требование при нажатии клавиши escape Esc должно отображаться модальное удаление (другой модал уже реализован и работает).

Но в QA возникла проблема , как при других всплывающих окнах (например, отсканированное контрольное изображение / повторное сканирование / всплывающее окно с идентификатором клиента /)появляются всплывающие окна с сообщениями об ошибках), затем при нажатии Esc эти всплывающие окна должны закрываться первыми.

Если других всплывающих окон нет, то откроется только модал удаления, чего в данный момент не происходит.При нажатии Esc он все еще открывает всплывающее окно удаления.

Вопрос: Как определить наличие других всплывающих окон.

Примечание : В самом начале разработки, в некотором общем сервисе, мы могли бы создать флаг типа isPopupOpened: boolean = true, и при закрытии того же всплывающего окна его следует установить в isPopupOpened = false.Но это не реализовано, и несколько модалов реализованы, и все они открываются на разных этапах в моей доске.Пользователь может нажать Esc в любой момент времени.Вот я и хочу к какому же решению.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я получил решение.

keyCommandHandler(command: Command): void {
        switch (command.name) {
          case 'App.Escape':
          if (this._router.url.indexOf('dialogs') === -1  && this._router.url.indexOf('subdialogs') === -1) {
            this.cancelHelper();
          }else {
            this._router.navigate(['./', { outlets: { dialogs: null }, relativeTo: this._activatedRoute }]);
          }
            break;
        }
      }

Просто проверьте, есть ли в вашем URL какие-либо диалоги или поддиалоги.У меня это работает.

0 голосов
/ 28 сентября 2018

Возможно, вам потребуется поддерживать состояние для каждого всплывающего окна в общем сервисе.В зависимости от значения состояния вам нужно обработать / закрыть всплывающее окно и нажать кнопку ESC.Для обработки событий клавиатуры вы можете использовать директиву, а в Конструкторе может быть добавлен общий сервис для обновления состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...