我有一个函数canDeactivate
,应该返回true
或false
。这可以通过调用openConfirmDialog()
函数的结果来确定,该函数将打开ngx-bootstrap模态“确认”对话框,并等待用户响应(可能导致true
或false
)。这是代码:
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
// if there are no pending changes, just allow deactivation; else confirm first
return component.canDeactivate() ?
true :
this.openConfirmDialog();
}
openConfirmDialog() {
this.modalRef = this.modalService.show(ConfirmationComponent);
return this.modalRef.content.onClose.subscribe(result => {
console.log('results', result);
})
}
从订阅到
result
的this.modalRef.content.onClose
正在工作。我可以成功登录true
或false
。当结果变为true
或false
时,如何返回true
或false
作为canDeactivate
的值?还是我错过了重点,我应该以不同的方式做事吗?我的
ConfirmationComponent
看起来像这样,它将onClose
定义为Observable<boolean>
(特别是Subject<boolean>
),因此我可以成功返回可观察的布尔值,但是如何获取canDeactivate
以返回true
或false
每当openConfirmDialog
接收到true
或false
值时?@Component({
templateUrl: './confirmation.component.html'
})
export class ConfirmationComponent {
public onClose: Subject<boolean>;
constructor(private _bsModalRef: BsModalRef) {
}
public ngOnInit(): void {
this.onClose = new Subject();
}
public onConfirm(): void {
this.onClose.next(true);
this._bsModalRef.hide();
}
public onCancel(): void {
this.onClose.next(false);
this._bsModalRef.hide();
}
}
最佳答案
多亏@David,我将对onClose
的订阅更改为map
而不是subscribe
,并且可以使用:
openConfirmDialog() {
this.modalRef = this.modalService.show(ConfirmationComponent);
// line below - change from 'subscribe' to 'map'
return this.modalRef.content.onClose.map(result => {
return result;
})
}
但是,正如@Ingo Burk指出的那样,我可以简单地使用:
openConfirmDialog() {
this.modalRef = this.modalService.show(ConfirmationComponent);
return this.modalRef.content.onClose;
}