Как я могу вызвать метод, когда конкретный экземпляр BsModalRef скрыт? - PullRequest
0 голосов
/ 21 октября 2019

В прошлом при работе с модалами я сталкивался с шаблоном, который возвращает объект ModalRef с обещанием, которое разрешается или отклоняется, когда модальное окно закрывается или отклоняется.

При просмотре документации для BsModalRef в Ngx-Bootstrap, похоже, нет никакого способа отследить, была ли эта модальная ссылка закрыта или отклонена.

Вместо этого они, похоже, рекомендуют подписаться на событие onHidden() в BsModalService. К сожалению, это не работает для меня, так как это вызовет событие, когда любой модал скрыт. Я хочу реагировать только на то, что конкретный модальный экземпляр скрыт.

Можно ли мне это сделать?

Я рассмотрел использование оператора take() Rxjs, чтобы получить только первое событие, запущенное после подписки на onHidden Observable, но это выглядит немного странно.

const modalRef = modalService.show(RedirectToHomeModalComponent);

const returnHome = () => console.log('Returning home');

this.bsModalService.onHidden.pipe(take(1), returnHome);

1 Ответ

0 голосов
/ 22 октября 2019

Может быть, вы можете подписаться на любой Eventmitter из содержимого вашего модального.

на modal.component.ts

hideEvent: EventEmitter<any> = new EventEmitter();

onSomeFunction(){
    this.hideEvent.next(value);
}

ngOnDestroy(){
    this.hideEvent.next(); // modal is closed without any data.
}

на parent.component. тс

const modalRef = modalService.show(RedirectToHomeModalComponent);
this.modalRef.content.hideEvent.pipe(take(1)).subscribe(value => {
    if(value){ // closed with a value.
      ... do something
    }
    else { // closed via backdrop or something else
      ... do something
    }
});
...