5

我正在使用组件作为模板打开一个模态,一切正常,模态打开并且我正在订阅 onHide 事件,订阅也有效。

但我在这里有一个挑战,我想发送一个具体的原因,例如:'消息添加成功'作为原因。我怎样才能做到这一点?我怎样才能发送一个特定的字符串作为原因?

目前,我正在尝试在 MessageAddComponent 组件中设置一个值并使用 bsModalRef.Content 在父组件中访问它,但这不是一个好主意。

newMessage() {
    this.bsModalRef = this.modalService.show(MessageAddComponent, {
        class: 'modal-lg'
    });
    this.subscriptions.push(this.modalService.onHide.subscribe((reason: string) => {
        // i dont like this approach
        if (this.bsModalRef.content.anySuccessfulAction) {
            console.log('foo and bar')
        }
        this.unsubscribe();
    }));
}
4

4 回答 4

6

终于找到解决方案:

在用作模态的组件中注入 BsModalService ,然后将关闭原因设置为波纹管

this.modalService.setDismissReason(theReason);
于 2017-11-13T08:56:24.190 回答
6

为了简化您的订阅,您可以通过.take()first()运算符创建“一次性”订阅:

this.modalService.onHide
    .pipe(take(1))
    .subscribe(() => {
        console.log(this.bsModalRef.content)
    });
于 2019-07-26T13:59:34.540 回答
2

好的解决方案放在一起:

this.modalService.onHide.pipe(take(1), filter(reason => reason === 'yourReason')).subscribe(() => {
    // Do anything here, this will get called only once
});

然后在隐藏模态之前在模态中:

this.modalService.setDismissReason('yourReason');
于 2019-11-18T15:03:12.343 回答
0

当我们调用 modalRef.show(component) 时,它会转到组件但它不会在屏幕上显示任何内容。
如果您使用调试器观察它,那么在执行几行之后它将显示弹出窗口。
假设我有

ngOnInit(){
    method1();
    method2();
}
method1(){
    modalRef.show(component);
    modalRef.hide();
}
method2(){
    modalRef.show(component);
    modalRef.hide();
}

当我这样做时,modal2 将首先弹出并关闭。modal1弹出来了,但是不会隐藏,因为hide的执行已经结束,在方法1中不会再去那里。

于 2019-08-05T13:12:21.377 回答