0

过去在使用模式时,我遇到过一种模式,它返回一个 ModalRef 对象,该对象上有一个承诺,当模式关闭或解除时,该对象被解决或拒绝。

查看 Ngx-Bootstrap 中 BsModalRef 的文档,似乎没有任何方法可以跟踪该模态引用是否已关闭或关闭。

相反,他们似乎建议订阅onHidden()BsModalService 上的事件。不幸的是,这对我不起作用,因为它会在隐藏任何模式时触发事件。我只想对隐藏的特定模态实例做出反应。

我有什么办法可以做到这一点吗?

我考虑过使用 Rxjs 的take()操作符仅在订阅onHiddenObservable 后触发第一个事件,但这感觉有点 hacky。

const modalRef = modalService.show(RedirectToHomeModalComponent);

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

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

1 回答 1

0

也许您可以从您的模态内容中订阅任何 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.ts 上

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
    }
});
于 2019-10-21T21:10:06.257 回答