Открыть модал после шага навигации

1

Простой шаг навигации, который мне нужно подождать, пока модал не получит шаблон на странице, к которой мы идем.

public onOpenModal(item) {
  this.router.navigate([item.link]).then(() => {
    this.modal.open('createSpace'); // Error: Uncaught (in promise): Error: Modal not found
  });
  this.modal.open('createSpace'); // works fine
}

по какой-то причине, когда я вызываю this.modal.open() внутри then(), он блокирует ошибки. Я подозреваю, что проблема в сфере? Есть идеи? если я вызываю modal.open() вне блока then(), это работает, однако мне нужно ждать завершения перехода.

РЕДАКТИРОВАТЬ: Я считаю, что шаблон не полностью загружен... может быть, поэтому, почему Модал не может быть найден... будет иметь смысл.

Есть ли способ действительно ждать, пока шаблон будет готов?

  • 0
    Пожалуйста, укажите, что this.modal в этом контексте.
  • 0
    @SiddAjmera this.modal открывает API для манипулирования модальным, определяемым идентификатором templ, в этом случае #createSpace. Я думаю, что проблема в том, что TPL еще не готов, поэтому идентификатор не загружен. Есть ли способ действительно дождаться полной загрузки tpl перед запуском модального кода?
Показать ещё 1 комментарий
Теги:
angular
modal-dialog

1 ответ

0

Это странно. Не совсем уверен, почему это проблема в первую очередь. Но не могли бы вы попробовать сделать это и посмотреть, работает ли это:

async onOpenModal(item) {
  await this.router.navigate([item.link]);
  this.modal.open('createSpace');
}

Вот рабочий образец StackBlitz для вашей ссылки.


ПРИМЕЧАНИЕ. Вы не указали, что это за модал, поэтому в этом примере я использовал модал ngx-bootstrap. Но в твоем случае все должно работать как положено.

  • 0
    Я попробовал это с асинхронным ожиданием, а также с NavigationEnd ... Это странно. Я на 99% уверен, что шаблон еще не готов, но я не понимаю, почему.
  • 1
    Было бы здорово и очень полезно, если бы вы могли создать минимальный образец стекаблица, повторяющий эту проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню