在 ngx-bootstrap 模式中将参数发送到 onHide 事件
sending parameter to onHide event in ngx-bootstrap modal
我正在使用组件作为模板打开模态,一切正常,模态打开并且我正在订阅 onHide 事件,订阅也有效。
但我有一个挑战,
我想发送一个具体的原因,例如:'message added successfully' 作为原因。我怎样才能做到这一点?
如何发送特定字符串作为原因?
目前,我正在尝试在 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();
}));
}
终于找到解决方案:
在用作模态的组件中注入 BsModalService,然后如下设置关闭原因
this.modalService.setDismissReason(theReason);
为了简化您的订阅,您可以通过 .take() 或 first() 运算符创建“一次性”订阅:
this.modalService.onHide
.pipe(take(1))
.subscribe(() => {
console.log(this.bsModalRef.content)
});
当我们调用 modalRef.show(component) 时,它会转到组件,但不会在屏幕上显示任何内容。
如果您使用调试器观察它,那么在执行几行之后就会显示弹出窗口。
假设我有
ngOnInit(){
method1();
method2();
}
method1(){
modalRef.show(component);
modalRef.hide();
}
method2(){
modalRef.show(component);
modalRef.hide();
}
当我这样做时,modal2 将首先弹出并关闭。弹出了modal1,但是不会隐藏,因为hide的执行已经结束了,方法1中不会再去。
好的解决方案放在一起:
this.modalService.onHide.pipe(take(1), filter(reason => reason === 'yourReason')).subscribe(() => {
// Do anything here, this will get called only once
});
然后在隐藏模态之前在模态中:
this.modalService.setDismissReason('yourReason');
我正在使用组件作为模板打开模态,一切正常,模态打开并且我正在订阅 onHide 事件,订阅也有效。
但我有一个挑战, 我想发送一个具体的原因,例如:'message added successfully' 作为原因。我怎样才能做到这一点? 如何发送特定字符串作为原因?
目前,我正在尝试在 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();
}));
}
终于找到解决方案:
在用作模态的组件中注入 BsModalService,然后如下设置关闭原因
this.modalService.setDismissReason(theReason);
为了简化您的订阅,您可以通过 .take() 或 first() 运算符创建“一次性”订阅:
this.modalService.onHide
.pipe(take(1))
.subscribe(() => {
console.log(this.bsModalRef.content)
});
当我们调用 modalRef.show(component) 时,它会转到组件,但不会在屏幕上显示任何内容。
如果您使用调试器观察它,那么在执行几行之后就会显示弹出窗口。
假设我有
ngOnInit(){
method1();
method2();
}
method1(){
modalRef.show(component);
modalRef.hide();
}
method2(){
modalRef.show(component);
modalRef.hide();
}
当我这样做时,modal2 将首先弹出并关闭。弹出了modal1,但是不会隐藏,因为hide的执行已经结束了,方法1中不会再去。
好的解决方案放在一起:
this.modalService.onHide.pipe(take(1), filter(reason => reason === 'yourReason')).subscribe(() => {
// Do anything here, this will get called only once
});
然后在隐藏模态之前在模态中:
this.modalService.setDismissReason('yourReason');