【问题标题】:How can I call a method once a specific BsModalRef instance is hidden?一旦隐藏了特定的 BsModalRef 实例,我如何调用方法?
【发布时间】:2019-10-21 20:41:34
【问题描述】:

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

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

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

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

我曾考虑过使用 Rxjs 的 take() 运算符只接收订阅 onHidden Observable 后触发的第一个事件,但这感觉有点 hacky。

const modalRef = modalService.show(RedirectToHomeModalComponent);

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

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

【问题讨论】:

    标签: angular ngx-bootstrap ngx-bootstrap-modal


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多